Fetch the repository succeeded.
以 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
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
-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命名空间 下的那个随机字符串)
conf/registry.conf
配置,将 type 改为 nacos
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"
}
}
conf/nacos-config.txt
配置(上述 nacos.sql 中已经导入、可略过此步骤)修改 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
cd ..
sh ./bin/seata-server.sh -p 8091 -m file
启动后在 Nacos 的服务列表下面可以看到一个名为serverAddr
的服务
@EnableTxSeata
//yaml 配置
chao:
cloud:
tx:
seata:
server-addr: # seata->nacos地址
namespace: # seata->nacos命名空间 默认 空
cluster: # seata->集群标识 默认 default
这里是尤其需要注意的,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>
chao:
cloud:
oauth2:
ant-matchers:
- /health/**
- /login/**
chao:
cloud:
oauth2:
mapping-auth: # 这里的@代表 / ,意为 路径:权限
@chao-cloud-auth@oauth@user: ROLE_USER
感谢下列优秀开源项目:
感谢诸位用户的关注和使用,chao-cloud-micro并不完善,未来还恳求各位开源爱好者多多关照,提出宝贵意见。
作者 [@chaojunzi 1521515935@qq.com]
2019年9月9日
Sign in for post a comment
Comments ( 3 )