当前位置: 首页 > news >正文

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

相关文章:

SpringCloud总结(springcloud alibaba)

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

轻轻松松上手的LangChain学习说明书

本文为笔者学习LangChain时对官方文档以及一系列资料进行一些总结&#xff5e;覆盖对Langchain的核心六大模块的理解与核心使用方法&#xff0c;全文篇幅较长&#xff0c;共计50000字&#xff0c;可先码住辅助用于学习Langchain。 一、Langchain是什么&#xff1f; 如今各类AI…...

全面对比与选择指南:Milvus、PGVector、Zilliz及其他向量数据库

本文全面探讨了Milvus、PGVector、Zilliz等向量数据库的特性、性能、应用场景及选型建议&#xff0c;通过详细的对比分析&#xff0c;帮助开发者和架构师根据具体需求选择最合适的向量数据库解决方案。 文章目录 向量数据库概述向量数据库的关键功能向量数据库的扩展和选择向量…...

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 核时&#xff0c…...

001-基于Sklearn的机器学习入门:Sklearn库基本功能和标准数据集

本节将介绍Sklearn库基本功能&#xff0c;以及其自带的几个标准数据集的调用方法。本节是学习后面内容的基础&#xff0c;如果您已经对本节内容相当熟悉&#xff0c;可跳过本节内容。 1.1 Sklearn库基本功能 的 1.2 Sklearn库标准数据集 Sklearn自带许多标准数据集&#xff…...

充电学习—7、BC1.2 PD协议

BC1.2&#xff08;battery charging&#xff09;充电端口识别机制&#xff1a; SDP、CDP、DCP 1、VBUS detect&#xff1a;vbus检测 PD&#xff08;portable device&#xff0c;便携式设备&#xff09;中有个检测VBUS是否有效的电路&#xff0c;电路有个参考值&#xff0c;高…...

技术点梳理0618

ann建库&#xff0c;分布式建库&#xff0c;性能优化&#xff0c;precision recall参数优化 hnsw&#xff0c;图索引 1. build a&#xff09;确定层&#xff1a;类似跳表思路建立多层&#xff0c;对每一个插入的节点&#xff0c;random层号l&#xff0c;从图的起始点search_…...

石英砂酸洗提纯方法和工艺

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

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】-权限批导-批量给某个角色导入事务码权限

需求&#xff1a;SAP期初上线的时候&#xff0c;业务顾问经常会遇到批量创建角色和分配角色权限的情况 岗位需求&#xff1a;一般是业务顾问定义权限&#xff0c;BASIS进行后期运维&#xff0c;今天讲两个批导功能&#xff0c;方便期初上线 主要函数&#xff1a;PRGN_READ_ROLE…...

异常处理总结

自定义异常 ​ 系统中的异常可以分为我们能预知的异常和未知的系统异常&#xff0c;对于我们能预知的异常如空值判断&#xff0c;用户名错误&#xff0c;密码错误等异常我们需要返回客户端&#xff0c;对于系统内部异常如SQL语法错误&#xff0c;参数格式转换错误等需要统一包…...

大模型日报2024-06-18

大模型日报 2024-06-18 大模型资讯 大模型产品 Olvy 3.0&#xff1a;AI加速客户反馈分析 摘要: Olvy 3.0推出AI自动监听和智能标签功能&#xff0c;通过Google Meet集成轻松提取洞察&#xff0c;贴近客户&#xff0c;激发同理心。 PlantIdentify-免费植物识别应用 摘要: PlantI…...

NumPy 双曲函数与集合操作详解

NumPy 双曲函数 NumPy 提供了 sinh()、cosh() 和 tanh() 等 ufunc&#xff0c;它们接受弧度值并生成相应的双曲正弦、双曲余弦和双曲正切值。 示例&#xff1a; import numpy as npx np.sinh(np.pi/2)print(x)示例 找到数组 arr 中所有值的双曲余弦值&#xff1a; import…...

ABSD-系统架构师(十三)

1、CDN和反向代理的基本原理都是&#xff08;&#xff09;。 A缓存 B负载均衡 C路由转发 DNAT转发 答案&#xff1a;A 2、&#xff08;必考&#xff09;在ABSD&#xff08;基于架构的软件开发&#xff09;方法中&#xff0c;顶层被分解为&#xff08;&#xff09;&#xff…...

PLC通过Profibus协议转Modbus协议网关接LED大屏通讯

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

第二十三篇——香农第二定律(二):到底要不要扁平化管理?

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

stm32f103 HAL库 HC-SR04测距

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

vue中通过自定义指令实现一个可拖拽,缩放的弹窗

效果 功能描述 按住头部可拖拽鼠标放到边框&#xff0c;可缩放多层重叠丰富的插槽&#xff0c;易于扩展 示例 指令代码 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窗口并实现鼠标拖动整个窗口

头文件&#xff1a; //鼠标事件 用于拖动窗口//一下三个函数都是QWidget的可重载成员函数void mouseMoveEvent(QMouseEvent* ev) override;void mousePressEvent(QMouseEvent* ev) override;void mouseReleaseEvent(QMouseEvent* ev) override; 源文件&#xff1a; / /// 鼠标…...

ICMR 2024在普吉岛闭幕,学者与泰国舞者共舞,燃爆全场

惊艳&#xff01;ICMR 2024在普吉岛闭幕&#xff0c;学者与泰国舞者共舞&#xff0c;燃爆全场&#xff01; 会议之眼 快讯 ICMR&#xff08;International Conference on Multimedia Retrieval&#xff09;即国际多媒体检索会议&#xff0c;是一个专注于多媒体检索领域的顶级…...

大模型精调:实现高效迁移学习的艺术

在人工智能领域&#xff0c;大型预训练模型&#xff08;以下简称“大模型”&#xff09;已经取得了令人瞩目的成果。这些模型通过在海量数据上进行预训练&#xff0c;能够捕捉到丰富的特征信息&#xff0c;为各种下游任务提供强大的支持。然而&#xff0c;如何将这些大模型应用…...

epoll服务端和客户端示例代码

epoll 服务端demo #include <stdio.h> #include <sys/epoll.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <fcntl.h> #include <unistd.h> #include <ne…...

最大乘积和-第13届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第85讲。 最大乘积和&#…...

探索C嘎嘎的奇妙世界:第四关---引用与内联函数

1 引用: 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。 #include<iostream> using namespace std;int main() {int a 0;// 引用&#xff1a;…...

DLS平台:惠誉全球经济展望——今年调增至2.6%,明年调减!

摘要 尽管全球货币政策逐渐转向宽松&#xff0c;惠誉国际评级&#xff08;Fitch Ratings&#xff09;在最新的《全球经济展望》中对2024年全球经济增长进行了上调。然而&#xff0c;由于美国经济增速放缓和其他因素的影响&#xff0c;2025年的全球经济增长预期则被下调。这篇文…...

数据结构习题

第一章 绪论 与数据元素本身的形式、内容、相对位置、个数无关的是数据的 逻辑结构。 第二章 线性表 在一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变&#xff0c;平均要移动的元素个数为 63.5。 n/2 单链表的存储密度 小于1。 创建一个包括n个结点的有序单链…...

交通银行软件开发工程师校招面试经历

本文介绍2024届春招中&#xff0c;交通银行总行的软件开发工程师岗位1场面试的基本情况、提问问题等。 2024年04月投递了交通银行总行的软件开发工程师岗位&#xff0c;暂时不清楚所在部门。目前完成了一面&#xff0c;并进入体检阶段&#xff1b;在这里记录一下面试的相关经历…...

bashrc和profile区别

作用与目的&#xff1a; .bashrc&#xff1a;这个文件主要用于配置和自定义用户的终端环境和行为。每次启动新的终端时&#xff0c;.bashrc文件都会被执行&#xff0c;加载用户设置的环境变量、别名、函数等。这使得用户能够根据自己的喜好和需求来定制终端的行为和外观。profi…...

BC153 [NOIP2010]数字统计

数字统计 一.题目描述二.输入描述&#xff1a;三.输出描述&#xff1a;四.数字范围五.题目思路六.代码实现 一.题目描述 请统计某个给定范围[L, R]的所有整数中&#xff0c;数字2出现的次数。 比如给定范围[2, 22]&#xff0c;数字2在数2中出现了1次&#xff0c;在数12中出现1次…...

如果创建网站/2024年新冠疫情最新消息今天

写在文前&#xff0c;本人菜鸡&#xff0c;写个文章&#xff0c;单纯为了记录下心路历程还有填坑&#xff0c;如果有说错的地方&#xff0c;还望大神指正&#xff01;今天记录的是在Windows下面开发hadoop的mapreduce的坑。 先说下流程吧&#xff1a; 1、安装Myeclipse&#xf…...

网站开发用的电脑/搜索引擎优化的核心及内容

设计思想: ①将题目简化为:在一个数组中找出出现次数最多的一个数。 ②因为出现最多的数超过总数的一半&#xff0c;所以可以采用两两相消的方法&#xff0c;把不等的相邻的两个数消去最终得到众数。 实验代码: import java.util.*;public class Findthemostnum {public static…...

风雨同舟网站建设/腾讯中国联通

CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节&#xff0c;使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络&#x…...

新手怎么开婚庆公司/长沙官网优化公司

删除MySQL数据库中表数据后&#xff0c;一般是不会自动释放表空间的&#xff0c;需要执行命令手动释放。 经过研究&#xff0c;最佳释放表空间命令为&#xff1a; ALTER TABLE 表名 ENGINE InnoDB; 这个方法&#xff0c;既可以释放MyISAM&#xff0c;也可以释放InnoDB。 另外…...

多语言网站一个域名/做网站怎么优化

第1章 什么是并发 ① 单核无法运行并行程序&#xff0c;因为只有1个CPU&#xff08;一次只能做1件事&#xff09;&#xff0c;单核计算机可运行并发程序。 1.1 给并发建模 -module(person). % 模块名与文件名一致&#xff0c;以小写字母开头&#xff0c;模块名…...

域名注册好如何做网站/东莞精准网络营销推广

AX里没有繁体中文的标签&#xff0c;只有简体中文&#xff0c;License Code里也只有简体中文。虽然从小用的都是简体中文&#xff0c;所以期望大统一&#xff0c;香港台湾大陆大家都用简体中文&#xff0c;叫法也统一一下&#xff0c;就不用这么麻烦了&#xff0c;但是人家还想…...