目录
版本说明(很重要)
springcloud alibaba对应组件版本说明
简述
spring cloud albaba
几大模块
周会讨论 - spring cloud alibaba每周都会有周会讨论,社区活跃
spring cloud alibaba官网
注册配置中心
简单介绍
nacos
步骤
示例代码
依赖
application.yml配置
添加注解 @EnableDiscoveryClient
配置中心核心文件bootstrap.properties
其他功能
多环境配置
命名空间(namespace )
Group
参考博客
分布式事务
Seata
官网
流程部署(将seata配置注册到nacos)
1.下载源码和程序文件
2.注册seata到nacos
2.3 script\config-center\nacos文件夹下右键git bash
注意(大坑-感谢下面保姆级教程文章的博主)使用Nacos+Seata,需要将service.default.grouplist这条配置删除,否则会找不到bean,说找不到default服务
3.启动seata
4.配置application.yml文件
5.导入依赖
坑(因mysql版本问题 重新手动编译时 可能找不到以下 手动排除即可 目前没发现问题)
下载
示例代码(官方)
注意:(替换版本可能出现其他问题 一定小心!!!)
参考
降级和限流
sentinel
1.下载jar包
2.相关使用
openfeign
官方简单示例
RestTemplate
openFeign
gateway
分布式消息
rocketmq
1.下载
2.代码
坑(rocketmq4.9.3报错 请参考以下博客)
参考
lombok小知识
lombok插件
maven仓库
参考文章
版本说明(很重要)
Spring Cloud Alibaba Version | Spring Cloud Version | Spring Boot Version |
---|---|---|
2.2.10-RC1* | Spring Cloud Hoxton.SR12 | 2.3.12.RELEASE |
2.2.9.RELEASE | Spring Cloud Hoxton.SR12 | 2.3.12.RELEASE |
2.2.8.RELEASE | Spring Cloud Hoxton.SR12 | 2.3.12.RELEASE |
2.2.7.RELEASE | Spring Cloud Hoxton.SR12 | 2.3.12.RELEASE |
2.2.6.RELEASE | Spring Cloud Hoxton.SR9 | 2.3.2.RELEASE |
2.2.1.RELEASE | Spring Cloud Hoxton.SR3 | 2.2.5.RELEASE |
2.2.0.RELEASE | Spring Cloud Hoxton.RELEASE | 2.2.X.RELEASE |
2.1.4.RELEASE | Spring Cloud Greenwich.SR6 | 2.1.13.RELEASE |
2.1.2.RELEASE | Spring Cloud Greenwich | 2.1.X.RELEASE |
2.0.4.RELEASE(停止维护,建议升级) | Spring Cloud Finchley | 2.0.X.RELEASE |
1.5.1.RELEASE(停止维护,建议升级) | Spring Cloud Edgware | 1.5.X.RELEASE |
springcloud alibaba对应组件版本说明
Spring Cloud Alibaba Version | Sentinel Version | Nacos Version | RocketMQ Version | Dubbo Version | Seata Version |
---|---|---|---|---|---|
2022.0.0.0 | 1.8.6 | 2.2.1 | 4.9.4 | ~ | 1.7.0 |
2022.0.0.0-RC2 | 1.8.6 | 2.2.1 | 4.9.4 | ~ | 1.7.0-native-rc2 |
2021.0.5.0 | 1.8.6 | 2.2.0 | 4.9.4 | ~ | 1.6.1 |
2.2.10-RC1 | 1.8.6 | 2.2.0 | 4.9.4 | ~ | 1.6.1 |
2022.0.0.0-RC1 | 1.8.6 | 2.2.1-RC | 4.9.4 | ~ | 1.6.1 |
2.2.9.RELEASE | 1.8.5 | 2.1.0 | 4.9.4 | ~ | 1.5.2 |
2021.0.4.0 | 1.8.5 | 2.0.4 | 4.9.4 | ~ | 1.5.2 |
2.2.8.RELEASE | 1.8.4 | 2.1.0 | 4.9.3 | ~ | 1.5.1 |
2021.0.1.0 | 1.8.3 | 1.4.2 | 4.9.2 | ~ | 1.4.2 |
2.2.7.RELEASE | 1.8.1 | 2.0.3 | 4.6.1 | 2.7.13 | 1.3.0 |
2.2.6.RELEASE | 1.8.1 | 1.4.2 | 4.4.0 | 2.7.8 | 1.3.0 |
2021.1 or 2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE | 1.8.0 | 1.4.1 | 4.4.0 | 2.7.8 | 1.3.0 |
2.2.3.RELEASE or 2.1.3.RELEASE or 2.0.3.RELEASE | 1.8.0 | 1.3.3 | 4.4.0 | 2.7.8 | 1.3.0 |
2.2.1.RELEASE or 2.1.2.RELEASE or 2.0.2.RELEASE | 1.7.1 | 1.2.1 | 4.4.0 | 2.7.6 | 1.2.0 |
2.2.0.RELEASE | 1.7.1 | 1.1.4 | 4.4.0 | 2.7.4.1 | 1.0.0 |
2.1.1.RELEASE or 2.0.1.RELEASE or 1.5.1.RELEASE | 1.7.0 | 1.1.4 | 4.4.0 | 2.7.3 | 0.9.0 |
2.1.0.RELEASE or 2.0.0.RELEASE or 1.5.0.RELEASE | 1.6.3 | 1.1.1 | 4.4.0 | 2.7.3 | 0.7.1 |
参考链接
版本说明 · alibaba/spring-cloopenud-alibaba Wiki · GitHub
简述
我看到有人推荐这个版本,那我就用这个版本开始测试了。
spring cloud albaba
我的理解是他提供了一套微服务标准,集成了各种组件.
有个需要注意的点就是spring cloud,springboot,spring cloud alibaba三者以及spring cloud alibaba对应组件都有严格的版本对应关系.
几大模块
- 注册配置中心
- 分布式事务
- 限流降级
- 分布式消息
- 异构服务
- 静态编译
周会讨论 - spring cloud alibaba每周都会有周会讨论,社区活跃
参与社区周会 | https://sca.aliyun.com
spring cloud alibaba官网
版本发布说明 | https://sca.aliyun.com
注册配置中心
简单介绍
这块主要是有注册中心和配置中心两个地方.
那首先注册中心是什么
我的理解是如果没有注册中心,那么每个服务直接都是直接访问各自的域名.
这样有很大的缺陷,首先耦合度高,只有一个出现异常,其他的都异常.
那么我们就需要一个东西去管理我们的服务.
简单来说,就是将我们的服务都注册到一个地方,然后大家都调用该地方,该地方再返回相关信息,把直接调用改成间接调用.也会增加系统的安全性.
那配置中心是什么
每个服务都会配置信息,通常我们都是配置到各自的yml文件或者其他的.
那么每次更改我们都需要找到对应的服务去更新各自的文件,有点麻烦,而且不安全.
那么我们就需要一个地方去集成这些配置.
alibaba集成的是nacos,他既可以做注册中心,也可以做配置中心.
nacos
官网地址:Redirecting to: https://nacos.io/
开源地址:GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.
从bin目录下启动后,找到cmd的网址,输入账号密码(nacos),就可以登录可视化平台
步骤
- 下载nacos,启动nacos
- 引入依赖
- 配置信息
- 编写代码(添加注解等)
示例代码
依赖
<!-- Nacos Config -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- Nacos Discovery -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
application.yml配置
spring:cloud:nacos:serverAddr: 127.0.0.1:8848config:enabled: true
server:port: 18084
management:endpoints:web:exposure:include: "*"
添加注解 @EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}@RestControllerclass EchoController {@GetMapping(value = "/echo/{string}")public String echo(@PathVariable String string) {return string;}}
}
配置中心核心文件bootstrap.properties
# 这里的应用名对应 Nacos Config 中的 Data ID,实际应用名称以配置中心的配置为准
spring.application.name=demo-server-config
# 指定查找名为 nacos-provider-config.yaml 的配置文件
spring.cloud.nacos.config.file-extension=yaml
# Nacos Server 的地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#注意: Spring Boot 配置文件的加载顺序,
# 依次为 bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml ,
# 其中 bootstrap.properties 配置为最高优先级
其他功能
多环境配置
此外nacos还支持多环境配置
spring-cloud-starter-alibaba-nacos-config 在加载服务配置时:
不仅仅加载了以 dataId 为 ${spring.application.name}.${file-extension:properties } 为前缀的基础配置,
还加载了 dataId 为 ${spring.application.name}-${profile}.${file-extension:properties } 的基础配置。
在日常开发中如果遇到多套环境下的不同配置,可以通过 Spring 提供的 ${spring.profiles.active} 这个配置项选择不同情况下的配置。
yml添加
spring.profiles.active=developnacos上添加
Data ID: nacos-config-develop.yaml
Group: DEFAULT_GROUP
配置格式: YAML
配置内容: current.env: develop-env
命名空间(namespace )
不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。
Namespace 的常用场景之一是不同环境的配置的区分隔离, 例如开发测试环境和生产环境的资源(如配置、服务)隔离等。 在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 中 public 命名空间即默认的命名空间。如果需要使用自定义的命名空间,可以通过以下配置来实现:
spring.cloud.nacos.config.namespace=YOUR_NAMESPACE_ID
注意:该配置必须放在 bootstrap.properties 文件中。
此外 spring.cloud.nacos.config.namespace 的值是 namespace 对应的 id,id 值可以在 Nacos 的控制台获取。
Group
在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下, 默认使用的是组 DEFAULT_GROUP 。如果需要自定义 Group,可以通过以下配置来实现:
spring.cloud.nacos.config.group=YOUR_GROUP_NAME
该配置必须放在 bootstrap.properties 文件中。并且在添加配置时 Group 的值一定要和 spring.cloud.nacos.config.group 的配置值一致。
spring.application.name=opensource-service-provider
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# config external configuration
# 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
spring.cloud.nacos.config.extension-configs[0].data-id=ext-config-common01.properties
# 2、Data Id 不在默认的组,不支持动态刷新
spring.cloud.nacos.config.extension-configs[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.extension-configs[1].group=GLOBALE_GROUP
# 3、Data Id 既不在默认的组,也支持动态刷新
spring.cloud.nacos.config.extension-configs[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.extension-configs[2].group=REFRESH_GROUP
spring.cloud.nacos.config.extension-configs[2].refresh=true其中 n 的值越大,优先级越高。
data-id 的值必须带文件扩展名
文件扩展名既可支持 properties,又可以支持 yaml/yml。# 配置支持共享的 Data Id
spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml
# 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].group=GROUP_APP1
# 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
spring.cloud.nacos.config.shared-configs[0].refresh=trueNacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置:
A: 通过 spring.cloud.nacos.config.shared-dataids 支持多个共享 Data Id 的配置
B: 通过 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多个扩展 Data Id 的配置
C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置优先级关系是: A < B < C
参考博客
【Spring Cloud Alibaba】3.创建服务提供者_spring-cloud alibaba 服务提供者-CSDN博客
四种方案解决报错:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasour-CSDN博客
分布式事务
简单的说,在分布式系统中一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务节点上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。
Seata
官网
Releases · apache/incubator-seata · GitHub
Seata AT 模式需要使用到 undo_log 表。
-- 注意此处0.3.0+ 增加唯一索引 ux_undo_log
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;
seata-server db 模式所需要的数据库表(示例中采用 nacos 作为配置,注册中心 存储模式为:db 采用 mysql。)
-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- 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 = InnoDBDEFAULT CHARSET = utf8mb4;-- 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 = InnoDBDEFAULT CHARSET = utf8mb4;-- 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`),KEY `idx_xid_and_branch_id` (`xid` , `branch_id`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8mb4;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 = InnoDBDEFAULT CHARSET = utf8mb4;INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);
Seata 1.5.1 支持 Seata 控制台本地访问控制台地址:http://127.0.0.1:7091
流程部署(将seata配置注册到nacos)
1.下载源码和程序文件
- Source code(zip) - 源码是用来将配置注册到nacos
- seata-server-x.x.x.zip - 启动seata
2.注册seata到nacos
2.1 script\server\db文件夹下,选择对应的脚本执行脚本(我是mysql用的mysql.sql)。
2.2 然后在script下有个config-center下的config.txt
#重要修改文件
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://172.19.190.45:3306/seater_demo?useUnicode=true
store.db.user=root
store.db.password=root
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
#新增 根据服务增加
service.vgroupMapping.order-service-tx-group=default
service.vgroupMapping.account-service-tx-group=default
service.vgroupMapping.business-service-tx-group=default
service.vgroupMapping.storage-service-tx-group=default
2.3 script\config-center\nacos文件夹下右键git bash
# 导入,t:命名空间,g:分组
sh nacos-config.sh -h 127.0.0.1 -p 8848 -t f260b67e-971f-4e04-84f0-5f77ea4e821b -g SEATA_GROUP
等待完成即可添加到nacos,去nacos可视化界面就可以看到了
注意(大坑-感谢下面保姆级教程文章的博主)
使用Nacos+Seata,需要将service.default.grouplist这条配置删除,否则会找不到bean,说找不到default服务
3.启动seata
去启动包下找到config,打开下面的file.conf
## transaction log store, only used in seata-server
store {## store mode: file、dbmode = "db"## file store propertyfile {## store location dirdir = "sessionStore"# branch session size , if exceeded first try compress lockkey, still exceeded throws exceptionsmaxBranchSessionSize = 16384# globe session size , if exceeded throws exceptionsmaxGlobalSessionSize = 512# file buffer size , if exceeded allocate new bufferfileWriteBufferCacheSize = 16384# when recover batch read sizesessionReloadReadSize = 100# async, syncflushDiskMode = async}## database store propertydb {## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp) etc.datasource = "druid"## mysql/oracle/postgresql/h2/oceanbase etc.dbType = "mysql"driverClassName = "com.mysql.jdbc.Driver"url = "jdbc:mysql://172.19.190.45:3306/seater_demo"user = "root"password = "root"minConn = 5maxConn = 30globalTable = "global_table"branchTable = "branch_table"lockTable = "lock_table"queryLimit = 100maxWait = 5000}
}
然后修改registry.conf
registry {# file 、nacos 、eureka、redis、zk、consul、etcd3、sofatype = "nacos"nacos {application = "seata-server"serverAddr = "172.19.190.45:8848"namespace = "b4eb82a7-c45f-4c78-8e2c-706c25ee0122"cluster = "default"username = "nacos"password = "nacos"}
}config {# file、nacos 、apollo、zk、consul、etcd3type = "nacos"nacos {serverAddr = "172.19.190.45:8848"namespace = "b4eb82a7-c45f-4c78-8e2c-706c25ee0122"group = "SEATA_GROUP"username = "nacos"password = "nacos"}
}
然后双击bin下的启动文件即可。
4.配置application.yml文件
server:port: 18081spring:cloud:nacos:discovery:server-addr: 172.19.190.45:8848username: 'nacos'password: 'nacos'loadbalancer:ribbon:enabled:trueapplication:name: business-serviceseata:enabled: trueapplication-id: ${spring.application.name}tx-service-group: ${spring.application.name}-tx-groupconfig:type: nacosnacos:serverAddr: 172.19.190.45:8848group: SEATA_GROUP # 配置文件的分组namespace: b4eb82a7-c45f-4c78-8e2c-706c25ee0122registry:type: nacosnacos:server-addr: 172.19.190.45:8848application: seata-servernamespace: b4eb82a7-c45f-4c78-8e2c-706c25ee0122cluster: default
feign:client:config:default:connectTimeout: 10000readTimeout: 10000
logging:level:io:seata: debug
5.导入依赖
<dependencies><dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>1.2.0</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><version>2.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies>
坑(因mysql版本问题 重新手动编译时 可能找不到以下 手动排除即可 目前没发现问题)
<exclusions><exclusion><groupId>com.sun</groupId><artifactId>jconsole</artifactId></exclusion><exclusion><groupId>com.sun</groupId><artifactId>tools</artifactId></exclusion>
</exclusions>
seata1.5.1安装(nacos作为注册以及配置中心,mysql8作为存储中心)_seata1.5 mysql8.0-CSDN博客
https://juejin.cn/post/7119397167894102024
下载
Releases · apache/incubator-seata · GitHub
示例代码(官方)
https://github.com/alibaba/spring-cloud-alibaba/blob/2022.x/spring-cloud-alibaba-examples/seata-example/account-service/pom.xml
注意:(替换版本可能出现其他问题 一定小心!!!)
1.4之前不支持表双主键!!!
参考
【Seata】SpringCloud集成Seatav1.6之XA模式_seata 基于xa 模式 spring boot 示例-CSDN博客
https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.27
本地windows运行seata服务并注册到nacos中心_seata启动时候会不会注册到注册中心-CSDN博客
快速开始 | https://sca.aliyun.com
保姆级配置 Seata1.2 + Nacos_vgroup-mapping nacos-CSDN博客
降级和限流
sentinel
1.下载jar包
Releases · alibaba/Sentinel · GitHub
运行以下命令,就可以看sentinel监控了
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
【Spring Cloud Alibaba】7.Sentinel熔断器仪表盘监控_springcloud alibaba 仪表盘-CSDN博客
添加相应配置
spring:cloud:sentinel:transport:port: 8719dashboard: localhost:8080
2.相关使用
Spring Cloud Alibaba 提供的 Sentinel 有关 Starter 提供了对 Spring Cloud 生态中如 OpenFeign、RestTemplate 等主流的客户端组件的适配支持。
SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)_alibaba sentinel-CSDN博客
SpringCloud Alibaba - Sentinel 限流规则(案例 + JMeter 测试分析)-CSDN博客
SpringCloud Alibaba - Sentinel 限流规则(案例 + JMeter 测试分析)_sentinel限流配置-CSDN博客
openfeign
先加上application.yml配置feign.sentinel.enabled=true
官方简单示例
@FeignClient(name = "service-provider", fallback = EchoServiceFallback.class, configuration = FeignConfiguration.class)
public interface EchoService {@GetMapping(value = "/echo/{str}")String echo(@PathVariable("str") String str);
}class FeignConfiguration {@Beanpublic EchoServiceFallback echoServiceFallback() {return new EchoServiceFallback();}
}class EchoServiceFallback implements EchoService {@Overridepublic String echo(@PathVariable("str") String str) {return "echo fallback";}
}
RestTemplate
@Bean
@SentinelRestTemplate(blockHandler = "handleException", blockHandlerClass = ExceptionUtil.class)
public RestTemplate restTemplate() {return new RestTemplate();
}
@SentinelRestTemplate 注解的属性支持限流(blockHandler, blockHandlerClass)和降级(fallback, fallbackClass)的处理。
其中 blockHandler 或 fallback 属性对应的方法必须是对应 blockHandlerClass 或 fallbackClass 属性中的静态方法。
该方法的参数跟返回值跟 org.springframework.http.client.ClientHttpRequestInterceptor#interceptor 方法一致,其中参数多出了一个 BlockException 参数用于获取 Sentinel 捕获的异常。
比如上述 @SentinelRestTemplate 注解中 ExceptionUtil 的 handleException 属性对应的方法声明如下:
public class ExceptionUtil {public static ClientHttpResponse handleException(HttpRequest request, byte[] body, ClientHttpRequestExecution execution, BlockException exception) {...}
}
SentinelProperties 内部提供了 TreeMap 类型的 datasource 属性用于配置数据源信息。
rule-type 配置表示该数据源中的规则属于哪种类型的规则(flow,degrade,authority, system, param-flow, gw-flow, gw-api-group)。
进阶指南 | https://sca.aliyun.com
【Spring Cloud Alibaba】6.添加熔断机制(Sentinel)_feign.sentinel.enabled 关闭日志-CSDN博客
openFeign
版本问题-需要与springboot一致
1.加载依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
如果需要配合sentinel就加上yml配置
feign:sentinel:enabled: true
2.代码
@FeignClient(name = "service-provider")
public interface EchoService {/*** 调用服务提供方的输出接口.* @param str 用户输入* @return echo result*/@GetMapping("/echo/{str}")String echo(@PathVariable("str") String str);}
@RestController
public class TestController {@Autowiredprivate EchoService echoService;@GetMapping("/echo-feign/{str}")public String feign(@PathVariable String str) {return echoService.echo(str);}}
@EnableFeignClients
@SpringCloudApplication
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}}
https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign
【Spring Cloud Alibaba】5.创建服务消费者(Feign)_springcloud alibaba 消费者-CSDN博客
gateway
【Spring Cloud Alibaba】8.路由网关(Gateway)_springboot 路由网关-CSDN博客
分布式消息
rocketmq
1.下载
下载 | RocketMQ
RocketMQ的下载与安装(全网最细保姆级别教学)_rocketmq下载安装-CSDN博客
先下载,再配置环境变量,最后cmd运行以下命令
start mqnamesrv.cmd
start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable = true
2.代码
坑(rocketmq4.9.3报错 请参考以下博客)
windows RocketMQ 错误: 找不到或无法加载主类 Files\Java\jdk1.8.0_191\lib\dt.jar;C:\Program解决_dt.jar 报错-CSDN博客
参考
https://www.cnblogs.com/xfeiyun/p/16229303.html
Windows环境下RocketMQ的安装及配置(图文详解)_rocketmq windows-CSDN博客
快速开始 | Spring Cloud Alibaba
lombok小知识
1.下载插件安装到idea
2.添加依赖
3.加注解
lombok插件
Releases · mplushnikov/lombok-intellij-plugin · GitHub
maven仓库
https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-gateway
参考文章
【Spring Cloud Alibaba】Spring Cloud Alibaba 搭建教程_springcloudalibaba搭建教程-CSDN博客
概述 | https://sca.aliyun.com
Spring Boot 单体应用升级 Spring Cloud 微服务最佳实践 | https://sca.aliyun.com