以 spring-cloud 为基础,集成feign、nacos、seata、sentinel、mybatis-plus 整合单机版分布式事务,附加oauth2.0+security配置
chao-cloud-micro
├─api //feign接口
├─auth //微服务oauth2+security 8003(默认不开启,请在gateway打开过滤器 OAuth2GlobalFilter.class)
├─gateway //微服务网关 8000
├─provider //服务提供者 8001
└─consumer //服务消费者 8002
- 新建数据源 test,导入 sql/test.sql
- 新建数据源 seata,导入 sql/seata.sql
- 新建数据源 nacos,导入 sql/nacos.sql
- 注:nacos为微服务配置中心下一步详细介绍
- 新建数据源 oauth2,导入 sql/oauth2.sql
- 注:oauth2为微服务接口权限控制,默认不开启,非本章重点,可忽略。
Step2-配置nacos(nacos@安装手册)
- 下载nacos-1.1.3版本 ->nacos-server-1.1.3.zip
- 解压、修改 conf/application.properties、新增以下5行配置
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
- 启动nacos
- Linux/Unix/Mac
- sh startup.sh -m standalone
- Windows
- 双击startup.cmd运行文件。
- Linux/Unix/Mac
- 访问nacos http://127.0.0.1:8848/nacos
- 账号:nacos
- 密码: nacos
-Dspring.cloud.nacos.config.server-addr=127.0.0.1:8848 #你的nacos服务地址
-Dspring.cloud.nacos.config.namespace=0cdb13f9-8694-49b8-8a37-08b5f1895c6b #你的nacos命名空间(这里是 chao-cloud命名空间 下的那个随机字符串)
- chao-cloud-provider.yaml
- chao-cloud-consumer.yaml
- chao-cloud-auth.yaml (同上,可忽略)
1.在 Seata Release 下载相应版本的 Seata Server 并解压
registry {
type = "nacos"
nacos {
serverAddr = "127.0.0.1:8848"
namespace = "public"
cluster = "default"
}
}
config {
type = "nacos"
nacos {
serverAddr = "127.0.0.1:8848"
namespace = "public"
cluster = "default"
}
}
修改 service.vgroup_mapping
为自己应用对应的名称;如果有多个服务,添加相应的配置
如
service.vgroup_mapping.my_test_tx_group=default
#改为
service.vgroup_mapping.chao-cloud-provider-fescar-service-group=default
service.vgroup_mapping.chao-cloud-consumer-fescar-service-group=default
也可以在 Nacos 配置页面添加,data-id 为 service.vgroup_mapping.${YOUR_SERVICE_NAME}-fescar-service-group
, group 为 SEATA_GROUP
, 如果不添加该配置,启动后会提示no available server to connect
注意配置文件末尾有空行,需要删除,否则会提示失败,尽管实际上是成功的
cd conf
sh nacos-config.sh 127.0.0.1:8848 #127.0.0.1:8848 为你的nacos服务地址
成功后会提示
init nacos config finished, please start seata-server
- Data Id: registry.type
- Group: SEATA_GROUP
- 内容为 nacos 格式选txet
cd ..
sh ./bin/seata-server.sh -p 8091 -m file
启动后在 Nacos 的服务列表下面可以看到一个名为serverAddr
的服务
- 启动 gateway
- 启动 provider
- 启动 consumer
- http://localhost:8000/chao-cloud-consumer/test?userId=1
- 查看 seata 数据库的 order表 是否有数据,没有则正确
- 项目的nacos配置和 seata的nacos配置可分开 ->请查看seata/conf/registry.conf
@EnableTxSeata
//yaml 配置
chao:
cloud:
tx:
seata:
server-addr: # seata->nacos地址
namespace: # seata->nacos命名空间 默认 空
cluster: # seata->集群标识 默认 default
- 说明
- 在启动类增加@EnableTxSeata
- 目前只支持 nacos+feign+seata
这里是尤其需要注意的,Seata 是通过代理数据源实现事务分支,所以需要配置 io.seata.rm.datasource.DataSourceProxy
的 Bean,且是 @Primary
默认的数据源,否则事务不会回滚,无法实现分布式事务
@Data
@ConfigurationProperties(EnableTxSeata.TX_SEATA_PREFIX)
public class TxSeataConfig {
private String serverAddr;
private String namespace;
private String cluster;
@Bean(initMethod = "init")
@ConditionalOnMissingBean
@ConfigurationProperties(prefix = "spring.datasource")
public DruidDataSource druidDataSource() {
StaticLog.info("初始化-Seata-DruidDataSource");
return new DruidDataSource();
}
@Primary
@Bean
@ConditionalOnMissingBean
public DataSourceProxy dataSource(DataSource dataSource) {
return new DataSourceProxy(dataSource);
}
@Bean
@ConditionalOnClass(Feign.class)
public TxSeataFeignProxy TxSeataProxy() {
return new TxSeataFeignProxy();
}
}
<!-- oauth2 已经包含 security -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
- gateway-> OAuth2GlobalFilter 解开注释
- gateway-> OAuth2Properties 配置过滤的路径
chao:
cloud:
oauth2:
ant-matchers:
- /health/**
- /login/**
- auth-> AuthorizationServerConfig oauth2认证中心
- auth-> ResourceServerConfig 启用资源服务
- auth-> SecurityConfig Security 权限管理(本项目)
- auth-> MappingAuthProperties 配置路径-> 权限映射
chao:
cloud:
oauth2:
mapping-auth: # 这里的@代表 / ,意为 路径:权限
@chao-cloud-auth@oauth@user: ROLE_USER
- 如不特殊注明,所有模块都以此协议授权使用。
- 任何使用了chao-cloud-micro的全部或部分功能的项目、产品或文章等形式的成果必须显式注明chao-cloud-micro。
- 不允许 996 工作制度企业使用该开源软件
- 实施上由个人维护,欢迎任何人与任何公司向本项目开源模块。
- 充分尊重所有版权方的贡献,本项目不占有用户贡献模块的版权。
感谢下列优秀开源项目:
- nacos@配置注册中心
- seata@分布式事务
- Sentinel@微服务的哨兵
- helloworlde@seata-demo
- hutool-超级工具类
- lombok
- mybatis-plus
- ......
感谢诸位用户的关注和使用,chao-cloud-micro并不完善,未来还恳求各位开源爱好者多多关照,提出宝贵意见。
作者 [@chaojunzi 1521515935@qq.com]
2019年9月9日