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

springboot dubbo seata nacos集成 分布式事務(wù)seata實(shí)現(xiàn)

這篇具有很好參考價值的文章主要介紹了springboot dubbo seata nacos集成 分布式事務(wù)seata實(shí)現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Seata介紹

官網(wǎng):http://seata.io/zh-cn/docs/overview/what-is-seata.html
Seata 是一款開源的分布式事務(wù)解決方案,致力于提供高性能和簡單易用的分布式事務(wù)服務(wù)。Seata 將為用戶提供了 AT、TCC、SAGA 和 XA 事務(wù)模式,為用戶打造一站式的分布式解決方案。

springboot dubbo seata nacos集成 分布式事務(wù)seata實(shí)現(xiàn),分布式微服務(wù),高性能,spring boot,dubbo,分布式

dubbo介紹

官網(wǎng);https://cn.dubbo.apache.org/zh-cn/overview/what/
Apache Dubbo 是一款 RPC 服務(wù)開發(fā)框架,用于解決微服務(wù)架構(gòu)下的服務(wù)治理與通信問題,官方提供了 Java、Golang 等多語言 SDK 實(shí)現(xiàn)。使用 Dubbo 開發(fā)的微服務(wù)原生具備相互之間的遠(yuǎn)程地址發(fā)現(xiàn)與通信能力, 利用 Dubbo 提供的豐富服務(wù)治理特性,可以實(shí)現(xiàn)諸如服務(wù)發(fā)現(xiàn)、負(fù)載均衡、流量調(diào)度等服務(wù)治理訴求。Dubbo 被設(shè)計(jì)為高度可擴(kuò)展,用戶可以方便的實(shí)現(xiàn)流量攔截、選址的各種定制邏輯。
在云原生時代,Dubbo 相繼衍生出了 Dubbo3、Proxyless Mesh 等架構(gòu)與解決方案,在易用性、超大規(guī)模微服務(wù)實(shí)踐、云原生基礎(chǔ)設(shè)施適配、安全性等幾大方向上進(jìn)行了全面升級。

目標(biāo)

我們先說目標(biāo),為各位看官節(jié)省不匹配的時間
1、使用nacos做配置中心
2、使用nacos做注冊中心
3、微服務(wù)模塊化
4、使用dubbo作為服務(wù)管理
5、使用springboot做腳手架
6、使用seata做分布式事務(wù)

版本說明和代碼地址

Dubbo :3.1.0
Springboot:2.3.1.RELEASE
Seata:1.6.1
Nacos-config:0.2.10

實(shí)現(xiàn)源代碼地址
分支:microservice-boot-1.0.4-seata
代碼演示和測試:
microservice-boot-common模塊
microservice-boot-plat模塊

pom.xml

直接上pom文件吧

  
          <dubbo.version>3.1.0</dubbo.version>
          <spring-boot.version>2.3.1.RELEASE</spring-boot.version>
          <spring-context-support.version>1.0.11</spring-context-support.version>
  
          <!-- 微服務(wù)相關(guān) -->
          <nacos-config.version>0.2.10</nacos-config.version>
          <io.seata.version>1.6.1</io.seata.version>
  
  
  
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

 <!-- Dubbo Spring Boot Starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.spring</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>

        <!--nacos config -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-config-spring-boot-starter</artifactId>
            <version>${nacos-config.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.alibaba.nacos</groupId>
                    <artifactId>nacos-client</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-spring-boot-starter</artifactId>
        </dependency>

驗(yàn)證模塊

兩個模塊
microservice-boot-common
microservice-boot- plat
模擬:
plat中controller請求,本地服務(wù)(此服務(wù)使用分布式事務(wù)),本地服務(wù)調(diào)用dubbo服務(wù)(包括palt的保存數(shù)據(jù)和common的保存日志)

microservice-boot-common

1、yaml配置

  # seata 配置
seata:
  application-id: ${spring.application.name}
  config:
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      namespace: fb91b495-9490-436f-b9cd-023f2ca42b08
      group: SEATA_GROUP
      username: nacos
      password: nacos
      context-path:
      ##if use MSE Nacos with auth, mutex with username/password attribute
      #access-key:
      #secret-key:
      data-id: seataServer.properties
  # 默認(rèn)就是這個額,可以不配置
  tx-service-group: default_tx_group
  registry:
    custom:
      name: ${spring.application.name}
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      application: seata-server
      group: SEATA_GROUP
      namespace: 920bb73f-17da-4128-9de0-41893097ce38
      username: nacos
      password: nacos

2、dubbo服務(wù)代碼

package org.lwd.microservice.boot.common.service.dubbo;

import com.alibaba.fastjson2.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;
import org.lwd.microservice.boot.common.api.dto.VisitDubboDTO;
import org.lwd.microservice.boot.common.api.dubbo.VisitDubboService;
import org.lwd.microservice.boot.common.entity.dto.VisitDTO;
import org.lwd.microservice.boot.common.service.VisitService;
import org.lwd.microservice.boot.core.constant.HttpStatusEnum;
import org.lwd.microservice.boot.core.entity.BaseResult;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;


/**
 * @author weidong
 * @version V1.0.0
 * @since 2023/6/28
 */
@Slf4j
@DubboService
public class VisitDubboServiceImpl implements VisitDubboService {

    @Autowired
    VisitService visitService;

    /**
     * 保存
     *
     * @return
     */
    @Override
    public BaseResult<Integer> saveVisitDubboService(VisitDubboDTO visitDubboDTO) {
        log.info("----i am do saveVisitDubboService-----:{}", JSON.toJSONString(visitDubboDTO));
        BaseResult<Integer> baseResult = BaseResult.success();
        VisitDTO visitDTO = new VisitDTO();
        BeanUtils.copyProperties(visitDubboDTO, visitDTO);
        BaseResult<Integer> result = visitService.saveVisit(visitDTO);
        if (result.isSuccess()) {
            baseResult.setData(baseResult.getData());
        } else {
            baseResult.setCode(HttpStatusEnum.REQUEST_FAIL.getCode());
            baseResult.setMessage("保存日志失敗");
        }

        return baseResult;
    }
}

microservice-boot- plat

1、yaml配置

# seata 配置
seata:
  application-id: ${spring.application.name}
  config:
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      namespace: fb91b495-9490-436f-b9cd-023f2ca42b08
      group: SEATA_GROUP
      username: nacos
      password: nacos
      context-path:
      ##if use MSE Nacos with auth, mutex with username/password attribute
      #access-key:
      #secret-key:
      data-id: seataServer.properties
  # 默認(rèn)就是這個額,可以不配置
  tx-service-group: default_tx_group
  registry:
    custom:
      name: ${spring.application.name}
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      application: seata-server
      group: SEATA_GROUP
      namespace: 920bb73f-17da-4128-9de0-41893097ce38
      username: nacos
      password: nacos


2、dubbo服務(wù)實(shí)現(xiàn)

package org.lwd.microservice.boot.plat.service.dubbo;

import org.apache.dubbo.config.annotation.DubboService;
import org.lwd.microservice.boot.core.entity.BaseResult;
import org.lwd.microservice.boot.plat.api.dto.UserLoginDubboDTO;
import org.lwd.microservice.boot.plat.api.dubbo.UserLoginDubboService;
import org.lwd.microservice.boot.plat.entity.dto.UserLoginDTO;
import org.lwd.microservice.boot.plat.service.UserLoginService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 登錄基本服務(wù)
 * @author weidong
 * @version V1.0.0
 * @since 2023/7/3
 */
@DubboService
public class UserLoginDubboServiceImpl implements UserLoginDubboService {

    @Autowired
    UserLoginService userLoginService;

    @Override
    public BaseResult<Integer> saveUserLoginDubbo(UserLoginDubboDTO userLoginDubboDTO) {
        BaseResult<Integer> result = BaseResult.success();
        UserLoginDTO userLoginDTO = new UserLoginDTO();
        BeanUtils.copyProperties(userLoginDubboDTO,userLoginDTO);
        BaseResult<Integer> baseResult = userLoginService.saveUserLogin(userLoginDTO);
        if(baseResult.isSuccess()){
            result.setData(baseResult.getData());
        }
        return result;
    }
}

3、分布式事務(wù)服務(wù)實(shí)現(xiàn)

package org.lwd.microservice.boot.plat.service.impl;

import io.seata.core.context.RootContext;
import io.seata.spring.annotation.GlobalTransactional;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.lwd.microservice.boot.common.api.dto.VisitDubboDTO;
import org.lwd.microservice.boot.common.api.dubbo.VisitDubboService;
import org.lwd.microservice.boot.core.constant.HttpStatusEnum;
import org.lwd.microservice.boot.core.entity.BaseResult;
import org.lwd.microservice.boot.plat.api.dto.UserLoginDubboDTO;
import org.lwd.microservice.boot.plat.api.dubbo.UserLoginDubboService;
import org.lwd.microservice.boot.plat.entity.dto.UserLoginDTO;
import org.lwd.microservice.boot.plat.service.UserLoginSeataService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

/**
 * @author weidong
 * @version V1.0.0
 * @since 2023/7/3
 */
@Slf4j
@Service
public class UserLoginSeataServiceImpl implements UserLoginSeataService {

    @DubboReference
    UserLoginDubboService userLoginDubboService;
    @DubboReference
    VisitDubboService visitDubboService;

    @Override
    @GlobalTransactional(timeoutMills = 30000, name = "default_tx_group")
    public BaseResult<Integer> saveUserLoginSeata(UserLoginDTO dto) throws Exception {
        BaseResult<Integer> result = BaseResult.success();
        log.info("開始全局事務(wù):xid=" + RootContext.getXID());
        log.info("begin userLogin: " + dto);

        //保存登錄信息
        UserLoginDubboDTO userLoginDubboDTO = new UserLoginDubboDTO();
        BeanUtils.copyProperties(dto, userLoginDubboDTO);
        BaseResult<Integer> userResult = userLoginDubboService.saveUserLoginDubbo(userLoginDubboDTO);
        if (userResult.isSuccess()) {
            result.setData(userResult.getData());
        } else {
            result.setCode(HttpStatusEnum.REQUEST_FAIL.getCode());
            throw new Exception("登錄信息保存系統(tǒng)異常");
        }
        if (!result.isSuccess()) {
            return result;
        }

        //保存日志
        VisitDubboDTO visitDubboDTO = new VisitDubboDTO();
        visitDubboDTO.setServerIpAddress("3.3.3.3");
        if (dto.getEnabled().equals(1)) {
            visitDubboDTO.setCreateTime(dto.getCreateTime());
        }
        BaseResult<Integer> visitResult = visitDubboService.saveVisitDubboService(visitDubboDTO);
        if (visitResult.isSuccess()) {
            log.info("visit info pk:{}", visitResult.getData());
            result.setData(visitResult.getData());
        } else {
            result.setCode(HttpStatusEnum.REQUEST_FAIL.getCode());
            throw new Exception("日志保存系統(tǒng)異常");
        }

        return result;
    }
}

驗(yàn)證結(jié)果

springboot dubbo seata nacos集成 分布式事務(wù)seata實(shí)現(xiàn),分布式微服務(wù),高性能,spring boot,dubbo,分布式

注意事項(xiàng)

1、seata在注冊到nacos時,訂閱端的應(yīng)用名稱為unknown
臨時解決方案:

package org.lwd.microservice.boot.common;

import org.lwd.microservice.boot.middle.runtime.util.YmlUtils;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 *
 * @author weidong
 * @version V1.0.0
 * @since 2023/4/7
 */
@SpringBootApplication
public class CommonApplication {
    public static void main(String[] args) {
        //TODO 這塊有一個問題,seata在注冊到nacos時,訂閱端的應(yīng)用名稱為unknown,經(jīng)驗(yàn)證是獲取不到ProjectNameConfig中設(shè)置的${spring.application.name}
        //估計(jì)是加載順序獲取其他問題,現(xiàn)在這獲取數(shù)據(jù),優(yōu)先處理
        System.setProperty("project.name", YmlUtils.getApplicationName());
        SpringApplication.run(CommonApplication.class, args);
    }
}


2、分布式事務(wù)默認(rèn)AT模式文章來源地址http://www.zghlxwxcb.cn/news/detail-536076.html

到了這里,關(guān)于springboot dubbo seata nacos集成 分布式事務(wù)seata實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(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)文章

  • 若依微服務(wù) + seata1.5.2版本分布式事務(wù)(安裝配置nacos+部署)

    若依微服務(wù) + seata1.5.2版本分布式事務(wù)(安裝配置nacos+部署)

    若依官方使用的1.4.0版本seata,版本較低配置相對更麻煩一些 一、seata服務(wù)端下載,下載方式介紹兩種入口,如下: 1、找到對應(yīng)版本,下載 binary 即可。 下載包名為:seata-server-1.5.2.zip 2. github上下載? ?Releases · seata/seata · GitHub? 找到對應(yīng)的1.5.2版本,每個版本下都有一個縮放

    2024年02月09日
    瀏覽(24)
  • SpringBoot~ dubbo + zookeeper實(shí)現(xiàn)分布式開發(fā)的應(yīng)用

    SpringBoot~ dubbo + zookeeper實(shí)現(xiàn)分布式開發(fā)的應(yīng)用

    配置服務(wù)名字, 注冊中心地址, 掃描被注冊的包 server.port=8081 #當(dāng)前應(yīng)用名字 dubbo.application.name=provider-server #注冊中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 #掃描指定包下服務(wù) dubbo.scan.base-packages=com.demo.service 實(shí)現(xiàn)一個接口,在接口中完成需求 public interface Translate { String tran

    2024年04月10日
    瀏覽(20)
  • SpringCloud(17~21章):Alibaba入門簡介、Nacos服務(wù)注冊和配置中心、Sentinel實(shí)現(xiàn)熔斷與限流、Seata處理分布式事務(wù)

    SpringCloud(17~21章):Alibaba入門簡介、Nacos服務(wù)注冊和配置中心、Sentinel實(shí)現(xiàn)熔斷與限流、Seata處理分布式事務(wù)

    Spring Cloud Netflix項(xiàng)目進(jìn)入維護(hù)模式 https://spring.io/blog/2018/12/12/spring-cloud-greenwich-rc1-available-now 說明 Spring Cloud Netflix Projects Entering Maintenance Mode 什么是維護(hù)模式 將模塊置于維護(hù)模式,意味著 Spring Cloud 團(tuán)隊(duì)將不會再向模塊添加新功能。我們將修復(fù) block 級別的 bug 以及安全問題,我

    2024年01月19日
    瀏覽(43)
  • SpringBoot整合Dubbo和Zookeeper分布式服務(wù)框架使用的入門項(xiàng)目實(shí)例

    SpringBoot整合Dubbo和Zookeeper分布式服務(wù)框架使用的入門項(xiàng)目實(shí)例

    Dubbo是一個 分布式服務(wù)框架 ,致力于提供高性能和透明化的RPC遠(yuǎn)程服務(wù)調(diào)用方案,以及SOA服務(wù)治理方案。簡單的說,dubbo就是個服務(wù)框架,如果沒有分布式的需求,其實(shí)是不需要用的,只有在分布式的時候,才有dubbo這樣的分布式服務(wù)框架的需求。其本質(zhì)上是個遠(yuǎn)程服務(wù)調(diào)用

    2024年01月21日
    瀏覽(57)
  • 最新版 !快速掌握 JDK17 + springboot3 + springcloud Alibaba : 10、Seata 整合實(shí)現(xiàn)分布式事務(wù)

    最新版 !快速掌握 JDK17 + springboot3 + springcloud Alibaba : 10、Seata 整合實(shí)現(xiàn)分布式事務(wù)

    上一節(jié)成功啟動了seata,傳送門: https://blog.csdn.net/qq_16089135/article/details/133989446 1.1 官方文檔 中文文檔 Seata 是什么 1.2 模式分類 AT :基于支持本地 ACID 事務(wù)的關(guān)系型數(shù)據(jù)庫。 Java 應(yīng)用,通過 JDBC 訪問數(shù)據(jù)庫。 整體機(jī)制:二階段提交。 一階段:業(yè)務(wù)數(shù)據(jù)和回滾日志記錄在同一

    2024年02月06日
    瀏覽(21)
  • SpringBoot集成Skywalking實(shí)現(xiàn)分布式鏈路追蹤

    SpringBoot集成Skywalking實(shí)現(xiàn)分布式鏈路追蹤

    官方網(wǎng)址: ?Apache SkyWalking 官方文檔: ?SkyWalking 極簡入門 | Apache SkyWalking 下載地址 :Downloads | Apache SkyWalking? Agent :以探針的方式進(jìn)行請求鏈路的數(shù)據(jù)采集,并向管理服務(wù)上報(bào); OAP-Service :接收數(shù)據(jù),完成數(shù)據(jù)的存儲和展示; Storage :數(shù)據(jù)的存儲層,支持ElasticSearch、Mysql、

    2024年02月03日
    瀏覽(21)
  • 分布式id生成方案及springboot進(jìn)行集成

    UUID(Universally Unique Identifier) 即通用唯一識別碼,是一種由網(wǎng)絡(luò)軟件使用的標(biāo)識符,它是由IP地址、當(dāng)前時間戳、隨機(jī)數(shù)、節(jié)點(diǎn)等多個部分組成,具有唯一性。但是,UUID方案的缺點(diǎn)是,生成的id較長,不便于存儲和使用。 Snowflake算法 它是Twitter公司開源的一個分布式唯一ID生成器

    2023年04月08日
    瀏覽(19)
  • 分布式:一文吃透分布式事務(wù)和seata事務(wù)

    分布式:一文吃透分布式事務(wù)和seata事務(wù)

    什么是事務(wù) 事務(wù)是并發(fā)控制的單位,是用戶定義的一個操作序列。 事務(wù)特性 原子性(Atomicity): 事務(wù)是數(shù)據(jù)庫的邏輯工作單位,事務(wù)中包括的諸操作要么全做,要么全不做。 一致性(Consistency): 事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)。一致性

    2024年02月07日
    瀏覽(21)
  • Seata分布式事務(wù)

    Seata分布式事務(wù)

    本地事務(wù),也就是傳統(tǒng)的單機(jī)事務(wù)。在傳統(tǒng)數(shù)據(jù)庫事務(wù)中,必須要滿足四個原則: 分布式事務(wù),就是指不是在單個服務(wù)或單個數(shù)據(jù)庫架構(gòu)下,產(chǎn)生的事務(wù),例如: 跨數(shù)據(jù)源的分布式事務(wù) 跨服務(wù)的分布式事務(wù) 綜合情況 完成上面的操作需要訪問三個不同的微服務(wù)和三個不同的

    2024年02月09日
    瀏覽(24)
  • 分布式事務(wù) Seata

    分布式事務(wù) Seata

    事務(wù)(Transaction)是計(jì)算機(jī)科學(xué)中的一個重要概念,主要是指一個 完整的、不可分割的操作序列 。在關(guān)系型數(shù)據(jù)庫中,事務(wù)通常用于描述對數(shù)據(jù)庫進(jìn)行的一系列操作的執(zhí)行單元。 事務(wù)的ACID特性 : 原子性(Atomicity):事務(wù)是一個原子操作,要么全部執(zhí)行,要么全部回滾。如

    2024年02月17日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包