spring boot+dubbo+nacos+seata分布式事务简单实例

一、下载seata服务端软件(以下以windows 为例):

      ①:下载链接:https://github.com/seata/seata/releases

      ②:配置seata;打开seata进入conf目录,编辑file 和registy文件(注意:这里file.conf为实力配置文件,最终生效的文件为,类型为:CONF文件)

   配置注册中心:打开registy.conf(文件类型为:CONF)----这里使用nacos作为注册中心

配置中心也使用nacos

二、下载nacos:下载地址:https://github.com/alibaba/nacos/releases

    下载完成后,打开config文件夹,找到application.propetis文件,配置数据库,在config文件夹中,有nacos使用的相关sql。

三、启动nacos/启动seata

   打开:http://localhost:{yourPort}/nacos/index.html进入nacos管理平台,看到以下界面表示seata注册成功

四:导入seata配置信息,配置连接:https://github.com/seata/seata/blob/develop/script/config-center/

  

 打开config.txt修改相关信息

  导入config.text下载导入工具,工具连接https://github.com/seata/seata/tree/develop/script/config-center/nacos,出现一下数据标识导入成功

 

五:后端引入依赖:包括nacos、seata、等:

        <!--seata依赖-->
        <!-- https://mvnrepository.com/artifact/io.seata/seata-spring-boot-starter -->
        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-spring-boot-starter</artifactId>
            <version>1.4.1</version>
        </dependency>

        <!--nacos依赖-->
        <!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client -->
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.0.0</version>
        </dependency>
        <!--dubbo-nacos依赖-->
        <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo-registry-nacos -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
            <version>2.7.7</version>
        </dependency>

注意:几经周折发现如果不引入:jackson-databind,分布式事务就无法成功,因此必须引入jackson-databind

        
     <!--注意:如果springBoot 版本比较高,则需引入2.7.0以上的版本 -->
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.8</version>
        </dependency>

六:配置nacos和seata:

#nacos配置
nacos:
  config:
    server-addr: xxxxxxx
    group: SEATA_GROUP

  discovery:
    register:
      group-name: SEATA_GROUP
#====================================Seata Config===============================================
seata:
  enabled: true
  application-id: ${dubbo.application.name}
  tx-service-group: my_test_tx_group  //这里的group应当和 config.txt中:    
                                      //  service.vgroupMapping.my_test_tx_group=default 一                                                                                                
                                      //    致
  config:
    type: nacos
    nacos:
      server-addr: your serveraddress
      group : "SEATA_GROUP"
      namespace: ""
      username: ""
      password: ""

七:启动后台服务,在需要的方法上加上注解@GlobalTransactional即可。

以上文档为简单实例,测试信息请自行建立多个服务,进行测试

### 集成概述 在构建微服务架构时,Spring BootDubboNacos的集成能够提供强大的服务治理能力。通过这种组合,不仅可以简化开发流程,还能提高系统的可维护性和灵活性[^1]。 ### 使用Nacos作为注册中心和服务发现工具 Nacos作为一个动态服务发现、配置管理和服务中心,非常适合用于微服务体系中的服务注册与发现工作。其主要特点在于支持多种协议的服务发现方式(如DNS和RPC),并且具备良好的跨语言兼容性。 对于希望利用Nacos来完成这一任务的应用程序来说,在pom.xml文件中加入相应的依赖项是必不可少的第一步: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo-nacos-discovery</artifactId> </dependency> ``` 接着需要修改`application.properties`或`yaml`配置文件以指定Nacos服务器的位置以及其他必要的参数设置: ```properties spring.application.name=demo-service-provider spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 dubbo.protocol.name=dubbo dubbo.protocol.port=-1 dubbo.registry.address=nacos://127.0.0.1:8848 ``` 上述配置指定了应用程序名称、Nacos服务器地址以及Dubbo的相关属性。其中特别需要注意的是`dubbo.protocol.port`被设为-1表示由框架自动分配端口号;而`dubbo.registry.address`则表明使用Nacos作为默认注册中心。 ### 利用Dubbo实现远程过程调用(RPC) 为了让两个不同节点间可以通过网络互相通信并执行对方的方法调用,还需要引入另一个重要的组件——Dubbo。该框架提供了高效可靠的RPC机制,允许开发者轻松定义接口并通过简单的注解形式暴露给其他服务消费[^2]。 假设有一个名为`DemoService`的服务接口及其具体实现类,则可以在Provider端按照如下方式进行编码: #### Provider端代码示例 创建一个普通的Java接口作为对外提供的API入口: ```java public interface DemoService { String sayHello(String name); } ``` 随后编写其实现逻辑,并加上适当标注使其成为可供发布的服务实例之一: ```java @Service(version = "1.0.0") // 这里的@Service来自org.apache.dubbo.config.annotation.Service public class DemoServiceImpl implements DemoService { @Override public String sayHello(String name) { return "Hello, " + name; } } ``` 最后一步是在Consumer端声明对该服务的需求即可发起请求获取响应数据: #### Consumer端代码示例 同样地先定义好所需访问的目标接口签名: ```java @Reference(version = "1.0.0", check=false) private DemoService demoService; // 调用方法处... System.out.println(demoService.sayHello("world")); ``` 这里使用的`@Reference`注解来自于`org.apache.dubbo.config.annotation.Reference`包下,用来指示当前成员变量所代表的就是远端某个已发布出来的对象引用。 ### 结合Seata处理分布式事务 当涉及到多个数据库操作或者其他资源协调场景时,确保整个业务流程的一致性就显得尤为重要了。此时可以考虑借助于像Seata这样的分布式事务解决方案来进行全局控制[^3]。 不过这部分内容相对独立一些,因此如果读者感兴趣的话建议单独查阅相关资料深入了解具体的实施细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值