Apollo+Nacos+Seata+Spring Boot 分布式事务

一、本地启动apollo

1、去网站下载文件包:https://github.com/apolloconfig/apollo-build-scripts

2、新建两个库,苦命与sql名一致即可,执行sql目录下的apolloconfigdb.sql、apolloportaldb.sql两个sql文件

3、修改项目根目录下的demo.sh文件,将数据库链接改为自己新建的即可,注意一一对应

# apollo config db info
apollo_config_db_url="jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"
apollo_config_db_username=
apollo_config_db_password=

# apollo portal db info
apollo_portal_db_url="jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"
apollo_portal_db_username=
apollo_portal_db_password=

4、在根目录执行邮件打开Git Bash Here ,执行 ./demo.sh start 如果没有,请前往安装GIT,启动的时间会有点长,耐心等待即可,等出现一下输出日志:

5、./demo.sh stop 即可停止apollo

6、访问:http://localhost:8080/

     会出现

 访问:http://localhost:8070/ 默认用户名 apollo 密码是admin

 

登录进去:点击创建应用→(部门可以随便选择、appId是应用唯一标识集成项目需要、后面的都可以按照自己的喜好创建)→提交之后点击自己创建的应用→添加Namespace→创建Namespace→给配置文件起个名,选择你需要的配置文件的格式→选择public即可→提交之后选择配置权限→点击你创建的namespace,进行配置文件修改→修改完提交然后点击发布,配置文件即可使用。

 7、spring boot 项目集成

①、pom引入

<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
    <version>1.7.0</version>
</dependency>

②、新建apollo-env.properties配置文件

配置dev.meta=http:// 你的apollo 的地址(本地或服务器)

③、在本地的yml文件中加入apollo配置 :namespaces 是你创建的配置文件的名称,appid是创建的应用的名称。

apollo:
  bootstrap:
    #启用apollo配置中心
    enabled: true
apollo.bootstrap.eagerLoad.enabled=true来使Apollo的加载顺序放到日志系统加载之前

    eagerLoad:
      enabled: true
    namespaces: xxx.yml
app:
  id: 

④、在spring boot启动类上加注解

@EnableApolloConfig

二、本地启动nacos

1、官网下载nacos :Nacos 快速开始

2、下载个1.2.0以上的版本,因为分布式事务seata有要求

3、新建数据库,名为nacos即可,执行nacos→conf目录下的nacos-mysql.sql文件

4、打开配置文件(nacos安装目录 -> conf -> application.properties)

5、修改数据源配置:

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos
db.user.0=
db.password.0=

6、在nacos→bin目录下打开cmd命令窗口

执行:startup.cmd -m standalone

7、本地ip+8848端口 用户名:nacos 密码:nacos

8、可以新建命名空间,即后期服务注册的分组

9、spring boot项目集成nacos

①引入pom文件

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

②如果使用apollo将此配置放入yml文件

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 你的nacos地址
        group: DEFAULT_GROUP

三、本地启动seata

1、进入seata 官网下载地址:下载中心我这里选择的是1.4.2 (2021-04-26)版本

需要注意的是source | binary 都需要下载,一个是应用启动,一个含有配置文件信息

2、修改seata相关配置

①创建数据库seata,进入source下载的项目下seata-1.4.2\script\server\db

里面有关于各种数据库的脚本,按自己的需求导入数据

②修改seata/conf/file.conf 文件中的数据库链接

将mode="file" 改成db

store {
  ## store mode: file、db
  mode = "db"

将db下的数据库链接改成自己新建的seata 的数据库

db {
         url = "jdbc:mysql://127.0.0.1:3306/seata"
     }

③修改seata/conf/registry.conf

将type改为 nacos

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"

将 nacos改为自己的注册中心的地址

 nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
  }

将config 下的type = "apollo"

config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "apollo"

修改apollo为自己的配置中心

 apollo {
    appId = "ZS001"
    ## apolloConfigService will cover apolloMeta
    apolloMeta = ""  此处是apollo 的地址
    namespace = "seata" 是你新建的namespace 的地址
  }

启动seata 

进入bin 目录双击执行即可

四、补充:

在启动seata之前

还需要在apollo 上新建seata 相关配置的namespace

将下载的启动包下:\seata根目录config.txt 文件下的配置

放入namespance 提交发布即可

Spring Boot + Spring Cloud Alibaba Seata 中配置 TCC 模式,需要进行以下步骤: 1. 引入 Seata TCC 的依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-seata</artifactId> <version>2.0.3.RELEASE</version> </dependency> ``` 2. 配置 Seata TCC 的相关参数: ```yaml spring: application: name: demo-service # 应用名称 seata: service: group: my_test_tx_group # 事务分组名称 vgroup-mapping.my_test_tx_group: default # 分组所在的虚拟组 enable-degrade: false # 是否开启降级模式,默认为 false use-jdk-proxy: false # 是否使用 JDK 代理,默认为 false config: type: nacos # 配置中心类型,可以是 file、nacosapollo、zk nacos: namespace: seata # 命名空间 server-addr: localhost:8848 # Nacos 服务地址 group: SEATA_GROUP # 配置组 username: nacos # 用户名 password: nacos # 密码 file: name: file.conf # 配置文件名 registry: type: nacos # 注册中心类型,可以是 file、nacos、eureka、consul、zk nacos: server-addr: localhost:8848 # Nacos 服务地址 namespace: seata # 命名空间 group: SEATA_GROUP # 注册组 username: nacos # 用户名 password: nacos # 密码 tx-service-group: my_test_tx_group # 事务分组名称 ``` 3. 在需要使用 TCC 模式的方法上使用 @Tcc 注解: ```java @Service public class DemoServiceImpl implements DemoService { @Autowired private AccountService accountService; @Autowired private StorageService storageService; /** * TCC 模式下的分布式事务实现 */ @Override @GlobalTransactional(timeoutMills = 300000, name = "demo-service-tx") public void tccTransaction(String userId, String commodityCode, Integer count) { // 第一步:减少库存 storageService.decrease(commodityCode, count); // 第二步:扣除账户余额 accountService.decrease(userId, count); // 第三步:确认(提交) // do nothing // 第四步:取消(回滚) // do nothing } } ``` 4. 在 Seata 控制台中配置相应的 TCC 事务分组。 以上就是在 Spring Boot + Spring Cloud Alibaba Seata 中配置 TCC 模式的步骤。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值