您的位置:首页 > 健康 > 养生 > SpringCloud总结(springcloud alibaba)

SpringCloud总结(springcloud alibaba)

2024/7/4 6:26:39 来源:https://blog.csdn.net/weixin_53011574/article/details/137940673  浏览:    关键词:SpringCloud总结(springcloud alibaba)

目录

版本说明(很重要)

 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 VersionSpring Cloud VersionSpring 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 VersionSentinel VersionNacos VersionRocketMQ VersionDubbo VersionSeata 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),就可以登录可视化平台

使用步骤

  1. 下载nacos,启动nacos
  2. 引入依赖
  3. 配置信息
  4. 编写代码(添加注解等)

示例代码

1.加载依赖
<!-- 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>
2.加载 application.yml配置
spring:cloud:nacos:serverAddr: 127.0.0.1:8848config:enabled: true
server:port: 18084
management:endpoints:web:exposure:include: "*"
3.添加注解 @EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}
}
4.配置中心核心文件bootstrap.properties(此步骤是配置中文的)

bootstrap和application文件优先级参考
application配置文件优先级、bootstrap和application的区别_application优先级-CSDN博客

# 这里的应用名对应 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

高级功能

多环境配置

此外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

下载

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(高版本可能只有一个yml文件 内容类似 参照yml语法就行,可以参考example文件(官方提供))


## 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'application: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
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>

坑(不兼容mysql8)

可能出现高版本不支持mysql8,需要重新打包。

重新手动编译时,可能找不到以下两个包,手动排除即可,目前没发现问题。(主要流程参考下面提供的博客)

<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​​​​​​

示例代码(官方)

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组件

使用流程

1.加载依赖

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId><version>2.2.8.RELEASE</version></dependency>

2.加载配置

spring:application:name: order-servicemain:allow-bean-definition-overriding: truecloud:gateway:# 设置与服务注册发现组件结合,这样可以采用服务名的路由策略discovery:locator:enabled: true# 配置路由规则routes:# 采用自定义路由 ID(有固定用法,不同的 id 有不同的功能,详见:https://cloud.spring.io/spring-cloud-gateway/2.0.x/single/spring-cloud-gateway.html#gateway-route-filters)- id: MOONCE-CONSUMER# 采用 LoadBalanceClient 方式请求,以 lb:// 开头,后面的是注册在 Nacos 上的服务名uri: lb://account-service# Predicate 翻译过来是“谓词”的意思,必须,主要作用是匹配用户的请求,有很多种用法predicates:# Method 方法谓词,这里是匹配 GET 和 POST 请求- Method=GET,POST- id: MOONCE-CONSUMER-FEIGNuri: lb://order-servicepredicates:- Method=GET,POST

参考

【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.代码参考

https://www.cnblogs.com/xfeiyun/p/16229303.html

坑(rocketmq4.9.3报错 请参考以下博客)

场景1:用nacos配置就出错,本地配置没问题 正在调查!

场景2:刚下载4.9.3无法启动broker,参考以下博客可以解决。

windows RocketMQ 错误: 找不到或无法加载主类 Files\Java\jdk1.8.0_191\lib\dt.jar;C:\Program解决_dt.jar 报错-CSDN博客

 参考

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com