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 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
- 引入依赖
- 配置信息
- 编写代码(添加注解等)
示例代码
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
相关文章:

SpringCloud总结(springcloud alibaba)
目录 版本说明(很重要) springcloud alibaba对应组件版本说明 简述 spring cloud albaba 几大模块 周会讨论 - spring cloud alibaba每周都会有周会讨论,社区活跃 spring cloud alibaba官网 注册配置中心 简单介绍 nacos 步骤 示例代码 依赖…...

轻轻松松上手的LangChain学习说明书
本文为笔者学习LangChain时对官方文档以及一系列资料进行一些总结~覆盖对Langchain的核心六大模块的理解与核心使用方法,全文篇幅较长,共计50000字,可先码住辅助用于学习Langchain。 一、Langchain是什么? 如今各类AI…...
全面对比与选择指南:Milvus、PGVector、Zilliz及其他向量数据库
本文全面探讨了Milvus、PGVector、Zilliz等向量数据库的特性、性能、应用场景及选型建议,通过详细的对比分析,帮助开发者和架构师根据具体需求选择最合适的向量数据库解决方案。 文章目录 向量数据库概述向量数据库的关键功能向量数据库的扩展和选择向量…...
svm 超参数
https://www.cnblogs.com/ChevisZhang/p/12932674.html https://wenku.baidu.com/view/b8a2c73cfd4733687e21af45b307e87100f6f861.html?wkts1718332423081&bdQuerysvm%E7%9A%84%E8%B6%85%E5%8F%82%E6%95%B0 用交叉验证找到最好的参数 C 和γ 。使用 RBF 核时,…...
001-基于Sklearn的机器学习入门:Sklearn库基本功能和标准数据集
本节将介绍Sklearn库基本功能,以及其自带的几个标准数据集的调用方法。本节是学习后面内容的基础,如果您已经对本节内容相当熟悉,可跳过本节内容。 1.1 Sklearn库基本功能 的 1.2 Sklearn库标准数据集 Sklearn自带许多标准数据集ÿ…...

充电学习—7、BC1.2 PD协议
BC1.2(battery charging)充电端口识别机制: SDP、CDP、DCP 1、VBUS detect:vbus检测 PD(portable device,便携式设备)中有个检测VBUS是否有效的电路,电路有个参考值,高…...

技术点梳理0618
ann建库,分布式建库,性能优化,precision recall参数优化 hnsw,图索引 1. build a)确定层:类似跳表思路建立多层,对每一个插入的节点,random层号l,从图的起始点search_…...

石英砂酸洗提纯方法和工艺
石英砂酸洗提纯方法和工艺是石英砂加工中至关重要的一个环节,其目的是通过化学手段去除石英砂中的杂质,提升其纯度。以下将详细介绍石英砂酸洗提纯的方法和工艺,以便更好地理解和应用这一技术。 一、概述 石英砂酸洗提纯主要是利用酸液对石英…...

linux安装dgl
1.DGL官网、选择与自己cuda、python版本匹配的dgl的whl文件CUDA11.8、python10并下载 2.用pip install运行 pip install /home/u2023170749/download/dgl-2.2.0cu118-cp310-cp310-manylinux1_x86_64.whl或者直接安装https://blog.csdn.net/weixin_44017989/article/details/13…...

【SAP-ABAP】-权限批导-批量给某个角色导入事务码权限
需求:SAP期初上线的时候,业务顾问经常会遇到批量创建角色和分配角色权限的情况 岗位需求:一般是业务顾问定义权限,BASIS进行后期运维,今天讲两个批导功能,方便期初上线 主要函数:PRGN_READ_ROLE…...
异常处理总结
自定义异常 系统中的异常可以分为我们能预知的异常和未知的系统异常,对于我们能预知的异常如空值判断,用户名错误,密码错误等异常我们需要返回客户端,对于系统内部异常如SQL语法错误,参数格式转换错误等需要统一包…...
大模型日报2024-06-18
大模型日报 2024-06-18 大模型资讯 大模型产品 Olvy 3.0:AI加速客户反馈分析 摘要: Olvy 3.0推出AI自动监听和智能标签功能,通过Google Meet集成轻松提取洞察,贴近客户,激发同理心。 PlantIdentify-免费植物识别应用 摘要: PlantI…...
NumPy 双曲函数与集合操作详解
NumPy 双曲函数 NumPy 提供了 sinh()、cosh() 和 tanh() 等 ufunc,它们接受弧度值并生成相应的双曲正弦、双曲余弦和双曲正切值。 示例: import numpy as npx np.sinh(np.pi/2)print(x)示例 找到数组 arr 中所有值的双曲余弦值: import…...
ABSD-系统架构师(十三)
1、CDN和反向代理的基本原理都是()。 A缓存 B负载均衡 C路由转发 DNAT转发 答案:A 2、(必考)在ABSD(基于架构的软件开发)方法中,顶层被分解为()ÿ…...

PLC通过Profibus协议转Modbus协议网关接LED大屏通讯
一、背景 Modbus协议和Profibus协议是两种常用于工业控制系统的通信协议,它们在自动化领域中起着重要的作用。Modbus是一种串行通信协议,被广泛应用于各种设备之间的通信,如传感器、执行器、PLC等。而Profibus则是一种现场总线通信协议&…...

第二十三篇——香农第二定律(二):到底要不要扁平化管理?
目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 对于企业的理解,扁平化的管理,如果从香农第二定律…...

stm32f103 HAL库 HC-SR04测距
目录 一、实现测距二、添加TIM3控制LED根据距离以不同频率闪烁三、观察时序Modebus协议12路超声波雷达设计方案1. 系统架构设计2. 硬件设计3. 软件设计4. 通信协议设计5. 用户接口6. 安全和冗余7. 测试和验证8. 电源和物理封装9. 文档和支持 一、实现测距 配置时钟 配置定时器…...

vue中通过自定义指令实现一个可拖拽,缩放的弹窗
效果 功能描述 按住头部可拖拽鼠标放到边框,可缩放多层重叠丰富的插槽,易于扩展 示例 指令代码 export const dragDialog {inserted: function (el, { value, minWidth 400, minHeight 200 }) {// 让弹窗居中let dialogHeight el.clientHeight ?…...

FreeRtos-09事件组的使用
1. 事件组的理论讲解 事件组:就是通过一个整数的bit位来代表一个事件,几个事件的or和and的结果是输出 #define configUSE_16_BIT_TICKS 0 //configUSE_16_BIT_TICKS用1表示16位,用0表示32位 1.1 事件组适用于哪些场景 某个事件若干个事件中的某个事件若干个事件中的所有事…...

多路h265监控录放开发-(1)建立head窗口并实现鼠标拖动整个窗口
头文件: //鼠标事件 用于拖动窗口//一下三个函数都是QWidget的可重载成员函数void mouseMoveEvent(QMouseEvent* ev) override;void mousePressEvent(QMouseEvent* ev) override;void mouseReleaseEvent(QMouseEvent* ev) override; 源文件: / /// 鼠标…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...