Skip to content

整合SpringCloud nacos mybits mybitsplus seata redis kafka rocketMq mongodb springsecurity JWT swagger2 zuul 等

Notifications You must be signed in to change notification settings

hsn999/start-cloud

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

71 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

整合nacos mybits mybitsplus seata redis kafka rocketMq mongodb springsecurity JWT swagger2 zuul 等

分布式事务组件AT模式,数据库采用mysql

demo中使用的相关版本号,具体请看代码。如果搭建个人demo不成功,验证是否是由版本导致,由于目前这几个项目更新比较频繁,版本稍有变化便会出现许多奇怪问题

  • seata 0.8.1
  • spring-cloud-alibaba-seata 2.1.0.RELEASE
  • spring-cloud-starter-alibaba-nacos-discovery 0.2.1.RELEASE
  • springboot 2.0.6.RELEASE
  • springcloud Finchley.RELEASE

具体项目:

  • base-common 基础配置及工具,含swagger配置
  • base-framework-mysql mysqlPlus配置
  • base-framework-mongodb mogo組件
  • base-framework-kafka
  • base-framework-rocketMq
  • base-framework-redis
  • base-framework-jwt
  • spc-account-server ,账务服务整合mybits
  • spc-order-serrver 订单服务,整合mybitsPlus
  • spc-storage-server库存服务,整合mybitsPlus
  • spc-client-demo 测试kafka、rocketmq、redis、mongo 可以使用此服务
  • spc-zuul-service zuul聚合全部 的api文档
  • spc-auth-center 认证中心,结合spring security及jwt创建token
  • spc-zuul-gateway zuul对外网关

1. 服务端配置

1.1 Nacos-server

版本为nacos-server-1.1.3,demo采用本地单机部署方式,请参考 Nacos 快速开始

1.2 Seata-server

seata-server为release版本0.8.0,demo采用本地单机部署,从此处下载 https://github.com/seata/seata/releases 并解压

1.2.1 修改conf/registry.conf 配置

设置type、设置serverAddr为你的nacos节点地址。

1.2.2 修改conf/nacos-config.txt 配置

service.vgroup_mapping.${your-service-gruop}=default,中间的${your-service-gruop}为自己定义的服务组名称,服务中的application.properties文件里配置服务组名称。

demo中有两个服务,分别是storage-service和order-service,所以配置如下

service.vgroup_mapping.storage-service-group=default
service.vgroup_mapping.order-service-group=default

1.2.3 启动seata-server

分两步,如下

# 初始化seata 的nacos配置
cd conf
sh nacos-config.sh 192.168.21.89

# 启动seata-server
cd bin
sh seata-server.sh -p 8091 -m file

1.3 zipkin

配置启动参考:https://github.com/hsn999/start-cloud/tree/master/spc-zipkin-server

1.4 zookeeper 及 kafka

参考: https://github.com/hsn999/start-cloud/blob/master/base-framwork-kafak/README.md

1.5 ReocketMq

参考: https://github.com/hsn999/start-cloud/blob/master/base-framwork-rocketmq/README.md

1.6 Mongo & Redis 略。。。。


2. 应用配置

2.1 数据库初始化

-- 创建 order库、业务表、undo_log表
create database seata_order;
use seata_order;

DROP TABLE IF EXISTS `order_tbl`;
CREATE TABLE `order_tbl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` varchar(255) DEFAULT NULL,
  `commodity_code` varchar(255) DEFAULT NULL,
  `count` int(11) DEFAULT 0,
  `money` int(11) DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `undo_log`
(
  `id`            BIGINT(20)   NOT NULL AUTO_INCREMENT,
  `branch_id`     BIGINT(20)   NOT NULL,
  `xid`           VARCHAR(100) NOT NULL,
  `context`       VARCHAR(128) NOT NULL,
  `rollback_info` LONGBLOB     NOT NULL,
  `log_status`    INT(11)      NOT NULL,
  `log_created`   DATETIME     NOT NULL,
  `log_modified`  DATETIME     NOT NULL,
  `ext`           VARCHAR(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8;


-- 创建 storage库、业务表、undo_log表
create database seata_storage;
use seata_storage;

DROP TABLE IF EXISTS `storage_tbl`;
CREATE TABLE `storage_tbl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `commodity_code` varchar(255) DEFAULT NULL,
  `count` int(11) DEFAULT 0,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`commodity_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `undo_log`
(
  `id`            BIGINT(20)   NOT NULL AUTO_INCREMENT,
  `branch_id`     BIGINT(20)   NOT NULL,
  `xid`           VARCHAR(100) NOT NULL,
  `context`       VARCHAR(128) NOT NULL,
  `rollback_info` LONGBLOB     NOT NULL,
  `log_status`    INT(11)      NOT NULL,
  `log_created`   DATETIME     NOT NULL,
  `log_modified`  DATETIME     NOT NULL,
  `ext`           VARCHAR(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8;
  
-- 创建 account库、业务表、undo_log表
create database seata_account;
use seata_account;
  
  CREATE TABLE `account` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `user_id` bigint(11) DEFAULT NULL COMMENT '用户id',
  `total` decimal(10,0) DEFAULT '0' COMMENT '总额度',
  `used` decimal(10,0) DEFAULT '0' COMMENT '已用余额',
  `residue` decimal(10,0) DEFAULT '0' COMMENT '剩余可用额度',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;


  
CREATE TABLE `undo_log`
(
  `id`            BIGINT(20)   NOT NULL AUTO_INCREMENT,
  `branch_id`     BIGINT(20)   NOT NULL,
  `xid`           VARCHAR(100) NOT NULL,
  `context`       VARCHAR(128) NOT NULL,
  `rollback_info` LONGBLOB     NOT NULL,
  `log_status`    INT(11)      NOT NULL,
  `log_created`   DATETIME     NOT NULL,
  `log_modified`  DATETIME     NOT NULL,
  `ext`           VARCHAR(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8;


-- 初始化库存模拟数据
INSERT INTO seata_storage.storage_tbl (id, commodity_code, count) VALUES (1, 'product-1', 9999999);
INSERT INTO seata_storage.storage_tbl (id, commodity_code, count) VALUES (2, 'product-2', 0);
INSERT INTO seat_account.account (`id`, `user_id`, `total`, `used`, `residue`) VALUES ('1', '1', '1000', '0', '100');

2.2 应用配置

见代码

几个重要的配置

  1. 每个应用的resource里需要配置一个registry.conf ,demo中与seata-server里的配置相同
  2. application.propeties 的各个配置项,注意spring.cloud.alibaba.seata.tx-service-group 是服务组名称,与nacos-config.txt 配置的service.vgroup_mapping.${your-service-gruop}具有对应关系

3. 认证中心,结合spring security及jwt创建token

JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案,在微服务环境下,我们可以借助JWT实现服务器的身份认证

基本过程如下图:

Image text

 

JWT的原则是在服务器身份验证之后,将生成一个JSON对象并将其发送回用户,如下所示。

{

"UserName": "xxx",

"Role": "Admin,User",

"Expire": "2019-06-01 10:13:26"

}

之后,当用户与服务器通信时,客户在请求中发回JSON对象。服务器仅依赖于这个JSON对象来标识用户。为了防止用户篡改数据,服务器将在生成对象时添加签名(有关详细信息,请参阅下文)。

服务器不保存任何会话数据,即服务器变为无状态,使其更容易扩展。

 

项目分成几个模块

        spc-zuul-gateway         base-framwork-jwt         spc-auth-center

4 其他配置

4.1 redis組件配置

redis安装配置可参考项目doc目录文档

增加配置文件 redisconf.properties

spring.redis.single.host=127.0.0.1
spring.redis.single.port=6379

spring.redis.cluster.nodes=192.168.1.42:7001,192.168.1.42:7002,192.168.1.42:7003,192.168.1.42:7004,192.168.1.42:7005,192.168.1.42:7006   
spring.redis.cluster.nodes.commandTimeout=5000

application.properties增加model.name指定redis类型 model.name=com.start.framework.redis.redis.util.standalone.JedisUtil(单独一个server) model.name=com.start.framework.redis.redis.util.cluster.JedisClusterUtil(集群)

使用Redis简单队列 addToQueue---加入队列 getFromQueue----从队列取出


5. 测试

打包: mvn clean package -Dmaven.test.skip=true

Image text

1. 访问 localhost:8899/swagger-ui.html 可查看聚合的相关接口

Image text

2. 分布式事务成功,模拟正常下单、扣库存

localhost:9091/swagger-ui.html

Image text Image text commit为成功提交 、rollback为失败回滚

3. 测试kafka、rocketmq、redis、mongo 可以使用storege服务

http://127.0.0.1:9092/swagger-ui.html

4. 测试链路监控

http://127.0.0.1:9411

Image text Image text Image text

About

整合SpringCloud nacos mybits mybitsplus seata redis kafka rocketMq mongodb springsecurity JWT swagger2 zuul 等

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published