国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單

這篇具有很好參考價(jià)值的文章主要介紹了spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

參考:Redis實(shí)現(xiàn)分布式鎖的7種方案 - 知乎

1、 準(zhǔn)備數(shù)據(jù)庫表,如下SQL表示庫存表,有主鍵ID和庫存數(shù)量字段

CREATE TABLE `t_stock` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `quantity` bigint(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

初始數(shù)據(jù)id? ? ? ? ? ?quantity

? ? ? ? ? ? ? 1111? ? ? ?9

2、pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.hmblogs</groupId>
    <artifactId>hmblogs</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>hmblogs</name>
    <description>hmblogs</description>
    <properties>
        <java.version>8</java.version>
        <druid.version>1.2.8</druid.version>
        <log4jdbc.version>1.16</log4jdbc.version>
    </properties>
    <dependencies>
        <!-- druid數(shù)據(jù)源驅(qū)動(dòng) -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- mybatis -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--Mysql依賴包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!--lombok插件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--監(jiān)控sql日志-->
        <dependency>
            <groupId>org.bgee.log4jdbc-log4j2</groupId>
            <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
            <version>${log4jdbc.version}</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.9</version>
        </dependency>

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3、應(yīng)用配置文件

server:
  port: 8081
  servlet.context-path: /

#配置數(shù)據(jù)源
spring:
  datasource:
    druid:
      db-type: com.alibaba.druid.pool.DruidDataSource
      driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
      url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:eladmin}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
      username: ${DB_USER:root}
      password: ${DB_PWD:123456}

4、StockMapper.xml如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.hmblogs.backend.dao.StockMapper">
    <resultMap id="BaseResultMap" type="com.hmblogs.backend.entity.Stock">
        <id column="id" property="id"/>
        <result column="quantity" property="quantity"/>
    </resultMap>

    <sql id="BaseResultMap">
        id, quantity
    </sql>

    <select id="findAll" resultMap="BaseResultMap">
        select
        <include refid="BaseResultMap"/>
        from t_stock

    </select>

    <select id="findById" resultMap="BaseResultMap"  parameterType="com.hmblogs.backend.entity.Stock">
        select
        <include refid="BaseResultMap"/>
        from t_stock
        where id=#{id}
    </select>

    <update id="updateStockById" parameterType="com.hmblogs.backend.entity.Stock">
        update t_stock set quantity=quantity-1 where id=#{id}
    </update>
</mapper>

5、BackendApplication

package com.hmblogs.backend;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BackendApplication {

    public static void main(String[] args) {
        SpringApplication.run(BackendApplication.class, args);
    }

}

6、Stock.java如下

package com.hmblogs.backend.entity;


import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("t_stock")
public class Stock {

    @TableId(value="id", type = IdType.AUTO)
    private Integer id;

    private Integer quantity;

}

7、StockMapper

package com.hmblogs.backend.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hmblogs.backend.entity.Stock;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface StockMapper extends BaseMapper<Stock> {
    List<Stock> findAll();

    Stock findById(Stock stock);

    Integer updateStockById(Stock stock);
}

8、OrderController

package com.hmblogs.backend.controller;

import com.hmblogs.backend.dao.StockMapper;
import com.hmblogs.backend.entity.Stock;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.IntStream;

@RestController
@Slf4j
public class OrderController {

    @Autowired
    private StockMapper stockMapper;

    //總庫存
    private long nKuCuen = 0;
    //商品key名字
    private String shangpingKey = "computer_key";
    //獲取鎖的超時(shí)時(shí)間 秒
    private int timeout = 30 * 1000;

    @GetMapping("/qiangdan")
    public List<String> qiangdan() {

        //搶到商品的用戶
        List<String> shopUsers = new ArrayList<>();

        //構(gòu)造很多用戶
        List<String> users = new ArrayList<>();
        IntStream.range(0, 10000).parallel().forEach(b -> {
            users.add("神牛-" + b);
        });

        //初始化庫存
        nKuCuen = 10;

        //模擬開搶
        users.parallelStream().forEach(b -> {
            String shopUser = qiang(b);
            if (!StringUtils.isEmpty(shopUser)) {
                shopUsers.add(shopUser);
            }
        });

        return shopUsers;
    }

    /**
     * 模擬搶單動(dòng)作
     *
     * @param b
     * @return
     */
    private String qiang(String b) {
        //用戶開搶時(shí)間
        long startTime = System.currentTimeMillis();

        //未搶到的情況下,30秒內(nèi)繼續(xù)獲取鎖
        while ((startTime + timeout) >= System.currentTimeMillis()) {
            //商品是否剩余
            if (nKuCuen <= 0) {
                break;
            }
            Jedis jedisCom = new Jedis("localhost",6379);
            jedisCom.auth("heming");
            if (jedisCom.setnx(shangpingKey, b)==1) {
                //用戶b拿到鎖
                log.info("用戶{}拿到鎖...", b);
                try {
                    //商品是否剩余
                    if (nKuCuen <= 0) {
                        break;
                    }

                    //模擬生成訂單耗時(shí)操作,方便查看:神牛-50 多次獲取鎖記錄
                    try {
                        TimeUnit.SECONDS.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    //搶購成功,商品遞減,記錄用戶
                    nKuCuen -= 1;
                    int id = 1111;
                    Stock stock = new Stock();
                    stock.setId(id);
                    Stock stockDo = stockMapper.findById(stock);
                    Integer quantity = stockDo.getQuantity();
                    if(quantity!=null && quantity>0){
                        stockMapper.updateStockById(stock);
                        log.info("update success.");
                    }else{
                        log.info("no update.");
                    }

                    //搶單成功跳出
                    log.info("用戶{}搶單成功跳出...所剩庫存:{}", b, nKuCuen);

                    return b + "搶單成功,所剩庫存:" + nKuCuen;
                } finally {
                    log.info("用戶{}釋放鎖...", b);
                    //釋放鎖
                    jedisCom.del(shangpingKey, b);
                }
            }
        }
        return "";
    }

}

9、驗(yàn)證

瀏覽器訪問http://localhost:8081/qiangdan

spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單,Spring Boot,JAVA-Redis,spring boot,學(xué)習(xí),redis

查看Idea的console內(nèi)容,

spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單,Spring Boot,JAVA-Redis,spring boot,學(xué)習(xí),redis

spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單,Spring Boot,JAVA-Redis,spring boot,學(xué)習(xí),redis?將console內(nèi)容拿到notepad++里面搜索

spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單,Spring Boot,JAVA-Redis,spring boot,學(xué)習(xí),redis

但是,搜索"update success."內(nèi)容,預(yù)期是9次,實(shí)際也是9次,符合我的需要,沒有讓庫存變成負(fù)數(shù),

spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單,Spring Boot,JAVA-Redis,spring boot,學(xué)習(xí),redis?查看數(shù)據(jù)庫表的庫存,id為1111的記錄的quantity為0,不是1,也不是負(fù)數(shù)

spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單,Spring Boot,JAVA-Redis,spring boot,學(xué)習(xí),redis

10、繼續(xù)第二種緯度的驗(yàn)證?

StockController的代碼如下:

package com.hmblogs.backend.controller;

import com.hmblogs.backend.dao.StockMapper;
import com.hmblogs.backend.entity.Stock;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;
import java.util.Date;

@RestController
@Slf4j
public class StockController {

    @Autowired
    private StockMapper stockMapper;

    /**
     * redis test
     * @return
     */
    @GetMapping(value = "/reduceStock")
    public void redisTestLock(){
        log.info("reduceStock");
        int id = 1111;
        String key = "reduceStock"+id;
        String time = new Date().getTime()+"";
        Jedis jedisCom = new Jedis("localhost",6379);
        jedisCom.auth("heming");
        if (jedisCom.setnx(key, time)==1) {
            log.info("{}生成鎖...", time);
            try{
                Stock stock = new Stock();
                stock.setId(id);
                Stock stockDo = stockMapper.findById(stock);
                Integer quantity = stockDo.getQuantity();
                if(quantity!=null && quantity>0){
                    stockMapper.updateStockById(stock);
                    log.info("update success.");
                }else{
                    log.info("no update.");
                }
            } finally {
                log.info("{}釋放鎖...", time);
                //釋放鎖
                jedisCom.del(key, time);
            }
        }
    }
}

將庫存改為10,驗(yàn)證,通過壓測驗(yàn)證有沒有保證鎖應(yīng)該有的作用,控制查庫存和當(dāng)不小于0的時(shí)候減少庫存這2個(gè)邏輯的原子性,預(yù)期做到,實(shí)際做到了。利用APIPost工具做壓測,如下圖所示

spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單,Spring Boot,JAVA-Redis,spring boot,學(xué)習(xí),redis

查看server的控制臺

spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單,Spring Boot,JAVA-Redis,spring boot,學(xué)習(xí),redis

?spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單,Spring Boot,JAVA-Redis,spring boot,學(xué)習(xí),redis

spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單,Spring Boot,JAVA-Redis,spring boot,學(xué)習(xí),redis?然后把這些內(nèi)容復(fù)制到notepad++里面搜索,

搜索reduceStock,有100個(gè)結(jié)果

spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單,Spring Boot,JAVA-Redis,spring boot,學(xué)習(xí),redis

搜索"生成鎖..."和"釋放鎖...",都有14次結(jié)果,說明jedisCom.setnx(key, time)==1成立的次數(shù)有14次。

spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單,Spring Boot,JAVA-Redis,spring boot,學(xué)習(xí),redis?搜索"update success.",有10次結(jié)果,說明減少庫存減少了10次,

spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單,Spring Boot,JAVA-Redis,spring boot,學(xué)習(xí),redis

此時(shí)查看數(shù)據(jù)庫表的庫存,發(fā)現(xiàn)為0

spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單,Spring Boot,JAVA-Redis,spring boot,學(xué)習(xí),redis

?搜索"no update.",發(fā)現(xiàn)有4個(gè)結(jié)果,說明有4次獲得鎖了,但是庫存已經(jīng)是0了,不能再減庫存了,庫存不能為負(fù)的。

spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單,Spring Boot,JAVA-Redis,spring boot,學(xué)習(xí),redis文章來源地址http://www.zghlxwxcb.cn/news/detail-805578.html

到了這里,關(guān)于spring boot學(xué)習(xí)第八篇:通過spring boot、jedis實(shí)現(xiàn)秒單的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【從零開始學(xué)習(xí)JAVA | 第八篇】String類

    【從零開始學(xué)習(xí)JAVA | 第八篇】String類

    目錄 前言: String類: 常見的認(rèn)識誤區(qū): 創(chuàng)建String類: ?注意點(diǎn): 總結(jié): ? ? ? ? String類是Java中最常見的一個(gè)類,本篇將對Stirng類的各種功能進(jìn)行詳細(xì)的介紹,各位小伙伴如果感興趣可以點(diǎn)擊進(jìn)來觀看。 Java中的String類是一個(gè)非常常用的類, 它表示一串字符序列 。Java的字

    2024年02月10日
    瀏覽(25)
  • 【從零開始學(xué)習(xí)Redis | 第八篇】認(rèn)識Redis底層數(shù)據(jù)結(jié)構(gòu)(下)

    【從零開始學(xué)習(xí)Redis | 第八篇】認(rèn)識Redis底層數(shù)據(jù)結(jié)構(gòu)(下)

    目錄 前言: ? ZipList: Ziplist的特性: QucikList: QuicList特征: SkipList: 跳表特征: RedisObijct: ?小心得: 總結(jié): ? ? ??? ? 在現(xiàn)代軟件開發(fā)中,數(shù)據(jù)存儲(chǔ)和處理是至關(guān)重要的一環(huán)。為了高效地管理數(shù)據(jù),并實(shí)現(xiàn)快速的讀寫操作,各種數(shù)據(jù)庫技術(shù)應(yīng)運(yùn)而生。其中,Redis作為一種

    2024年04月12日
    瀏覽(29)
  • 【Spring Boot 3】【Redis】集成Jedis

    軟件開發(fā)是一門實(shí)踐性科學(xué),對大多數(shù)人來說,學(xué)習(xí)一種新技術(shù)不是一開始就去深究其原理,而是先從做出一個(gè)可工作的DEMO入手。但在我個(gè)人學(xué)習(xí)和工作經(jīng)歷中,每次學(xué)習(xí)新技術(shù)總是要花費(fèi)或多或少的時(shí)間、檢索不止一篇資料才能得出一個(gè)可工作的DEMO,這占用了我大量的時(shí)

    2024年01月19日
    瀏覽(92)
  • 【FPGA入門】第八篇、FPGA驅(qū)動(dòng)VGA實(shí)現(xiàn)動(dòng)態(tài)圖像移動(dòng)

    【FPGA入門】第八篇、FPGA驅(qū)動(dòng)VGA實(shí)現(xiàn)動(dòng)態(tài)圖像移動(dòng)

    目錄 第一部分、實(shí)現(xiàn)效果 第二部分、動(dòng)態(tài)VGA顯示的原理 1、將動(dòng)態(tài)顯示的區(qū)域提前進(jìn)行賦值 2、圖像塊的移動(dòng)是每張圖片疊加后的效果 3、如何實(shí)現(xiàn)圖像塊位置的改變 第三部分、系統(tǒng)結(jié)構(gòu)和驅(qū)動(dòng)波形 1、系統(tǒng)的Top-down結(jié)構(gòu) 2、圖像塊移動(dòng)的驅(qū)動(dòng)波形 第四部分、代碼 1、同步信號

    2024年02月04日
    瀏覽(17)
  • 在Spring Boot微服務(wù)集成Jedis操作Redis

    記錄 :406 場景 :在Spring Boot微服務(wù)集成Jedis操作Redis的緩存和隊(duì)列。 版本 :JDK 1.8,Spring?Boot 2.6.3,redis-6.2.5,jedis-3.7.1。 1.微服務(wù)中配置 Redis信息 1.1在application.yml中Jedis配置信息 1.2使用 ConfigurationProperties加載Jedis配置 Spring Boot微服務(wù)在啟動(dòng)時(shí),自動(dòng)注解機(jī)制會(huì)讀取application.yml的

    2023年04月15日
    瀏覽(85)
  • 類EMD的“信號分解方法”及MATLAB實(shí)現(xiàn)(第八篇)——離散小波變換DWT(小波分解)

    類EMD的“信號分解方法”及MATLAB實(shí)現(xiàn)(第八篇)——離散小波變換DWT(小波分解)

    在之前的系列文章里,我們介紹了EEMD、CEEMD、CEEMDAN、VMD、ICEEMDAN、LMD、EWT,我們繼續(xù)補(bǔ)完該系列。 今天要講到的是小波分解,通常也就是指離散小波變換(Discrete Wavelet Transform, DWT)。在網(wǎng)上有一些介紹該方法的文章,但是總感覺不夠通俗或不夠透徹,希望讀完這篇能讓你有

    2024年02月07日
    瀏覽(17)
  • 第八篇: K8S Prometheus Operator實(shí)現(xiàn)Ceph集群企業(yè)微信機(jī)器人告警

    第八篇: K8S Prometheus Operator實(shí)現(xiàn)Ceph集群企業(yè)微信機(jī)器人告警

    我們的k8s集群與ceph集群是部署在不同的服務(wù)器上,因此實(shí)現(xiàn)方案如下: (1) ceph集群開啟mgr內(nèi)置的exporter服務(wù),用于獲取ceph集群的metrics (2) k8s集群通過 Service + Endponit + ServiceMonitor建立ceph集群metrics與Prometheus之間的聯(lián)系 建立一個(gè) ServiceMonitor 對象,用于 Prometheus 添加監(jiān)控項(xiàng); 為

    2024年02月14日
    瀏覽(21)
  • [Spring boot] Spring boot 整合RabbitMQ實(shí)現(xiàn)通過RabbitMQ進(jìn)行項(xiàng)目的連接

    [Spring boot] Spring boot 整合RabbitMQ實(shí)現(xiàn)通過RabbitMQ進(jìn)行項(xiàng)目的連接

    ???作者:天海奈奈 ??眼過千遍不如手錘一遍:推薦一款模擬面試,斬獲大廠 o f f e r ,程序員的必備刷題平臺 ? ? ??途W(wǎng)? ????點(diǎn)擊開始刷題之旅 目錄 什么是RabbitMQ ??消息隊(duì)列:接受并轉(zhuǎn)發(fā)消息,類似于快遞公司 消息隊(duì)列的優(yōu)點(diǎn) 消息隊(duì)列的特性 RabbitMQ特點(diǎn) RabbitMQ核

    2024年01月24日
    瀏覽(49)
  • 第八篇——Kafka Streams源碼解讀

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) Kafka Streams是一個(gè)開源分布式流處理平臺,它可以讓你輕松處理實(shí)時(shí)數(shù)據(jù)流。通過Kafka Streams API可以輕松創(chuàng)建、部署和運(yùn)行復(fù)雜的實(shí)時(shí)流處理應(yīng)用程序。雖然Kafka Stream提供了許多高級功能,但其底層原理卻十分簡單易懂,在學(xué)習(xí)之余,我們還是需

    2024年02月07日
    瀏覽(24)
  • 微服務(wù)開發(fā)系列 第八篇:Elasticsearch

    A、技術(shù)棧 開發(fā)語言:Java 1.8 數(shù)據(jù)庫:MySQL、Redis、MongoDB、Elasticsearch 微服務(wù)框架:Spring Cloud Alibaba 微服務(wù)網(wǎng)關(guān):Spring Cloud Gateway 服務(wù)注冊和配置中心:Nacos 分布式事務(wù):Seata 鏈路追蹤框架:Sleuth 服務(wù)降級與熔斷:Sentinel ORM框架:MyBatis-Plus 分布式任務(wù)調(diào)度平臺:XXL-JOB 消息中間

    2024年02月08日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包