nacos

版本说明:点击查看

这里选择nacos1.4.3

下载地址

https://github.com/alibaba/nacos/releases/download/1.4.3/nacos-server-1.4.3.ziphttps://github.com/alibaba/nacos/releases/download/1.4.3/nacos-server-1.4.3.zip

配置

conf/application.properties中取消注释,并配置数据库信息

# db mysql
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

导入数据表

conf/nacos-mysql.sql

启动

startup.cmd -m standalone /sh startup.sh -m standalone (单机模式) 

配置命名空间

1. 登录 http://*****:8848/nacos ,账号密码默认 nacos
2. 在命名空间增加记录,全部都写 dev【由于我的项目中配置的都是dev.所以需要配置下命名空间,如果使用默认的无需配置】

至此naocs就已配置完成

项目集成

增加配置项:

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        namespace: dev
        username: nacos
        password: nacos
        group: dev

启动项目后会在注册中心中可以看到服务已经注册成功

 至此已经完成了注册中心的集成。

 sentinel

版本

此处对应的cloud的sentinel的版本为1.8.0

下载地址

https://github.com/alibaba/Sentinel/releases/download/v1.8.0/sentinel-dashboard-1.8.0.jar

启动

java -jar Sentinel的jar包 

账户

默认账户密码 sentinel,sentinel 

项目集成

这里只把sentinel集成到了网关服务,一般情况下也是先集成到网关服务作为限流使用

<!-- sentinel服务调用 -->
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
			<!--去除jackson-dataformat-xml,否则会返回xml文件,而不是JSON-->
			<exclusions>
				<exclusion>
					<groupId>com.fasterxml.jackson.dataformat</groupId>
					<artifactId>jackson-dataformat-xml</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<!--配置sentinel规则持久化至nacos依赖-->
		<dependency>
			<groupId>com.alibaba.csp</groupId>
			<artifactId>sentinel-datasource-nacos</artifactId>
		</dependency>
		<!--和sentinel starter 配合使用,集成sentinel网关控制相关自动化配置依赖项(仅网关模块才需要依赖)-->
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
		</dependency>

至此 sentinel已经完成,访问接口后会在sentinel中看到访问的情况

seata

版本

1.3.0

下载地址

https://github.com/seata/seata/releases/download/v1.3.0/seata-server-1.3.0.zip

配置

配置文件调整:conf/registry.conf

1.使用nacos作为配置中心和注册中心,调整registry为nacos注册中心以及相应的配置信息.调整config为nacos作为配置中心.
2.事务分组问题:项目配置seata的时候大部分的问题就是事务分组的问题。seata默认的事务分组名称为my_test_tx_group,但是实际项目中很多情况是需要调整默认事务分组的名称,根据issues:https://github.com/seata/seata-samples/issues/411中提到的。如果调整了事务分组是需要去nacos的配置中心中增加一个配置记录的。以下服务的配置使用my_serivce_default_ts_group作为分组名称进行配置
data-id:service.vgroupMapping.my_serivce_default_ts_group
说明:my_serivce_default_ts_group就是我自己的事务分组名称
配置内容:default
我的分组:dev
在配置中心中加入事务分组信息【分组注册失败请查看issues:https://github.com/seata/seata-samples/issues/411】
效果如下

存储介质 

使用mysql作为存储介质

下载地址:

https://github.com/seata/seata/blob/develop/script/server/db/mysql.sql

sql:

-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `global_table`
(
    `xid`                       VARCHAR(128) NOT NULL,
    `transaction_id`            BIGINT,
    `status`                    TINYINT      NOT NULL,
    `application_id`            VARCHAR(32),
    `transaction_service_group` VARCHAR(32),
    `transaction_name`          VARCHAR(128),
    `timeout`                   INT,
    `begin_time`                BIGINT,
    `application_data`          VARCHAR(2000),
    `gmt_create`                DATETIME,
    `gmt_modified`              DATETIME,
    PRIMARY KEY (`xid`),
    KEY `idx_status_gmt_modified` (`status` , `gmt_modified`),
    KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(
    `branch_id`         BIGINT       NOT NULL,
    `xid`               VARCHAR(128) NOT NULL,
    `transaction_id`    BIGINT,
    `resource_group_id` VARCHAR(32),
    `resource_id`       VARCHAR(256),
    `branch_type`       VARCHAR(8),
    `status`            TINYINT,
    `client_id`         VARCHAR(64),
    `application_data`  VARCHAR(2000),
    `gmt_create`        DATETIME(6),
    `gmt_modified`      DATETIME(6),
    PRIMARY KEY (`branch_id`),
    KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
    `row_key`        VARCHAR(128) NOT NULL,
    `xid`            VARCHAR(128),
    `transaction_id` BIGINT,
    `branch_id`      BIGINT       NOT NULL,
    `resource_id`    VARCHAR(256),
    `table_name`     VARCHAR(32),
    `pk`             VARCHAR(36),
    `status`         TINYINT      NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking',
    `gmt_create`     DATETIME,
    `gmt_modified`   DATETIME,
    PRIMARY KEY (`row_key`),
    KEY `idx_status` (`status`),
    KEY `idx_branch_id` (`branch_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

CREATE TABLE IF NOT EXISTS `distributed_lock`
(
    `lock_key`       CHAR(20) NOT NULL,
    `lock_value`     VARCHAR(20) NOT NULL,
    `expire`         BIGINT,
    primary key (`lock_key`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('HandleAllSession', ' ', 0);

在业务的相应数据库中增加undo_log表

下载地址:

https://github.com/seata/seata/blob/develop/script/client/at/db/mysql.sql

sql:

CREATE TABLE IF NOT EXISTS `undo_log`
(
    `branch_id`     BIGINT       NOT NULL COMMENT 'branch transaction id',
    `xid`           VARCHAR(128) NOT NULL COMMENT 'global transaction id',
    `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',
    `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',
    `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense status',
    `log_created`   DATETIME(6)  NOT NULL COMMENT 'create datetime',
    `log_modified`  DATETIME(6)  NOT NULL COMMENT 'modify datetime',
    UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8 COMMENT ='AT transaction mode undo table';

启动

bin/相应平台的启动脚本
启动成功后会在nacos注册中心中可以看到一个seata-server

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐