SpringCloud总结(springcloud alibaba)

SpringcloudAlibaba详解---超详细 Spring Cloud Alibaba是阿里巴巴结合自身的微服务实践开源的微服务全家桶,我个人觉得其组件比Spring Cloud 中的组件更加好用和强大。并且对的Spring Cloud组件做了很好的兼容。比如在Spirng Cloud Alibaba中依然可以使用Feign作为服务调用方式,使用Eureak做服务注册发现等等。Nacos致力于帮助您发现,配置和管理微服务。它提供了一组简单有用的功能,使您能够实现动态服务发现,服务配置,服务元数据和流量管理。 阅读详情

目录

版本说明(很重要)

 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:8848
  config:
    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优先级-优快云博客

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

nacos上添加
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=true

Nacos 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 服务提供者-优快云博客

四种方案解决报错:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasour-优快云博客

分布式事务

简单的说,在分布式系统中一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务节点上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。

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 = InnoDB
  DEFAULT 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 = InnoDB
  DEFAULT 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 = InnoDB
  DEFAULT 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 = InnoDB
  DEFAULT 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、db
  mode = "db"

  ## file store property
  file {
    ## store location dir
    dir = "sessionStore"
    # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions
    maxBranchSessionSize = 16384
    # globe session size , if exceeded throws exceptions
    maxGlobalSessionSize = 512
    # file buffer size , if exceeded allocate new buffer
    fileWriteBufferCacheSize = 16384
    # when recover batch read size
    sessionReloadReadSize = 100
    # async, sync
    flushDiskMode = async
  }

  ## database store property
  db {
    ## 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 = 5
    maxConn = 30
    globalTable = "global_table"
    branchTable = "branch_table"
    lockTable = "lock_table"
    queryLimit = 100
    maxWait = 5000
  }
}

然后修改registry.conf

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "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、etcd3
  type = "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: 18081

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 172.19.190.45:8848
        username: 'nacos'
        password: 'nacos'
  application:
    name: business-service

seata:
  enabled: true
  application-id: ${spring.application.name}
  tx-service-group: ${spring.application.name}-tx-group
  config:
    type: nacos
    nacos:
      serverAddr: 172.19.190.45:8848
      group: SEATA_GROUP  # 配置文件的分组
      namespace: b4eb82a7-c45f-4c78-8e2c-706c25ee0122
  registry:
    type: nacos
    nacos:
      server-addr: 172.19.190.45:8848
      application: seata-server
      namespace: b4eb82a7-c45f-4c78-8e2c-706c25ee0122
      cluster: 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-优快云博客

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 示例-优快云博客

https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.27

本地windows运行seata服务并注册到nacos中心_seata启动时候会不会注册到注册中心-优快云博客

快速开始 | https://sca.aliyun.com

保姆级配置 Seata1.2 + Nacos_vgroup-mapping nacos-优快云博客

降级和限流 

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 仪表盘-优快云博客

添加相应配置

spring:
  cloud:
    sentinel:
      transport:
        port: 8719
        dashboard: localhost:8080
 2.相关使用

Spring Cloud Alibaba 提供的 Sentinel 有关 Starter 提供了对 Spring Cloud 生态中如 OpenFeign、RestTemplate 等主流的客户端组件的适配支持。

SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)_alibaba sentinel-优快云博客

SpringCloud Alibaba - Sentinel 限流规则(案例 + JMeter 测试分析)-优快云博客

SpringCloud Alibaba - Sentinel 限流规则(案例 + JMeter 测试分析)_sentinel限流配置-优快云博客

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 {
    @Bean
    public EchoServiceFallback echoServiceFallback() {
        return new EchoServiceFallback();
    }
}

class EchoServiceFallback implements EchoService {
    @Override
    public 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 关闭日志-优快云博客

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 {

	@Autowired
	private 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 消费者-优快云博客

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-service
  main:
    allow-bean-definition-overriding: true
  cloud:
    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-FEIGN
          uri: lb://order-service
          predicates:
            - Method=GET,POST

参考

【Spring Cloud Alibaba】8.路由网关(Gateway)_springboot 路由网关-优快云博客

分布式消息

rocketmq

1.下载

下载 | RocketMQ

RocketMQ的下载与安装(全网最细保姆级别教学)_rocketmq下载安装-优快云博客

先下载,再配置环境变量,最后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 报错-优快云博客

 参考

Windows环境下RocketMQ的安装及配置(图文详解)_rocketmq windows-优快云博客

快速开始 | 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搭建教程-优快云博客

概述 | https://sca.aliyun.com

Spring Boot 单体应用升级 Spring Cloud 微服务最佳实践 | https://sca.aliyun.com

SpringCloud Alibaba(保姆级入门及操作) 第一章 微服务概念 1.0 科普一些术语 科普一下项目开发过程中常出现的术语,方便后续内容的理解。 **服务器:**分软件与硬件,软件:类型tomcat这种跑项目的程序, 硬件:用来部署项目的电脑(一般性能比个人电脑好) **服务:**操作系统上术语:一个程序,开发中术语:一个能对外提供功能的程序 **微服务:**小的服务,一个完整项目可以拆n个子项目,这些子项目能独立运行,独立对为提供功能。 **节点:**微观上:一个服务,宏观上:一台服务器 **垂直扩展:**垂直扩展是指增强单机硬件性能 **水平扩 阅读详情

相关推荐

Spring Cloud Alibaba【什么是Nacos、Nacos Server下载安装 、Docker安装Nacos Server服务、微服务聚合父工程构建】(一)

Nacos是阿里巴巴开源的服务注册中心以及配置中心,致力于给开 发者提供一款便捷、简单上手的开源框架。为什么Nacos这么受欢迎Nacos官方文档的介绍中有这么一句话,如下:Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范 式、云原生范式) 的服务基础设施。这两个组件相信大家都用过,有什么感受?

1万+

[SpringCloud Alibaba]小白快速入门Spring Cloud Alibaba

课程目录如下:第一章 课程介绍第二章 微服务架构及注册中心eureka与nocos区别第三章 nacos官网介绍及单机部署第四章 nacos集群部署第五章 nacos控制台介绍第六章 注册中心nacos(服务注册与发现)第七章 Http客户端及负载均衡之springcloud openfeign第八章 nacos配置中心第九章 课程总结Alibaba nacos于2018年7月开源,并开始逐步拥抱springcloud社区,alibaba微服务框架大有超越之势,目前热度非常高,其中注册中心nacos就像人之心脏,值得分享与学习下,课件markdown资料及课程源码都已经上传。

电机控制-PMSM无感FOC控制(四)SVPWM——过调制

上一章我们提到了SVPWM矢量合成的范围在一个平面的矢量圆内,那么当电压矢量超出调制范围时,该怎么做呢?这就是过调制要解决的问题。电机控制-PMSM无感foc控制(三)SVPWM据之前讲解的内容我们可以知道,SVPWM技术在电压空间上模拟了一个近似于圆的电压轨迹,减小了相电流的谐波,降低了电机的谐波损耗,抑制了转矩脉动。然而,SVPWM技术也存在一些问题,合成电压矢量有极限便是其中之一。这个半径为√3/3Vdc的区域也被称作SVPWM的线性区域。

zhuxinmingde的博客 1311

Spring Cloud Alibaba简书(一)------微服务介绍

微服务介绍 1.1 系统架构演变 随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。 从互联网早起到现在,系统架构大体经历了下面几个过程: 单体应用架构—>垂直应用架构—>分布式架构—>SOA架构—>微服务架构,当然还有悄然兴起的Service Mesh(服务网格化)。 接下来我们就来了解一下每种系统架构是什么样子的, 以及各有什么优缺点。 1.1.1 单体应用架构 互联网早期,一般的网站应用流量较小,只需一个应用,将所有功能代码都部署在一起就可以,

ruiace的博客 2874

GPS数据处理必备:IGS精密星历下载与使用全攻略(附武汉大学/CDDIS/CODE/GFZ地址)

本文为GPS/GNSS数据处理者提供了IGS精密星历的完整下载与使用指南。详细解析了最终、快速、超快速三种精密星历产品的区别与选择策略,并手把手教学如何从武汉大学、CDDIS、CODE、GFZ四大主流数据中心高效获取数据,涵盖文件命名规则解析及自动化下载脚本,助力科研与工程应用。

weixin_29234239的博客 677

常见的AXI总线仲裁器概述-AXI协议理解(一)

SoC 设计广泛采用共享总线式的片上通信,其中的仲裁器是共享总线的关键技术之一。AMBA AXI 总线协议以高性能、高频率的系统设计为目标,适合高带宽、低延迟的系统设计,可以达到高频率的操作而不需要复杂的总线桥,满足众多部件的接口要求,具备高度灵活的互联结构,并且向后兼容 AHB 和 APB 接口。

Paul 安的博客 1万+

SpringCloud Alibaba

aa

weixin_42453582的博客 4万+

PreScan快速入门到精通第十一讲之PreScan道路标记,建筑物、抽象物体及交通标识

道路标记目的:路标是为了完善智能驾驶实验场景。用途:道路标记是附加在道路段上的。标记的大小{小、大}、颜色,以及相对于路段的位置和方向可以在属性编辑器中设置。也可以指定褪色和孔洞,类似于路段自动添加标记的配置。在GUI中的位置:作为一个预定义的库元素格式:NAMBOX: 汇编表中不知道。PreScan包含三个不同国家的标记:荷兰、日本和美国。可以通过在国家首选项中切换国家来隐藏或显示。附件道路标线附在路段上,并相对于路段原点定位。默认情况下,道路标记被固定在路段上,用小锚点表示。11.2 建筑物目...

小明师兄的博客 1803

关于Springboot、SpringCloud以及SpringCloud-Alibaba Nacos依赖问题

依赖关系SpringBoot和SpringCloud大版本对应关系Alibaba组件版本关系SpringBoot、Cloud、Alibaba 毕业版本依赖关系(推荐使用)依赖管理RELEASE 版本Alibaba组件依赖坐标示例 由于目前阿里的SpringCloud组件以及孵化成功,导致写项目导入pom依赖坐标时比较纠结,网上对版本的兼容介绍也变得五花八门。 SpringBoot和SpringCl...

17611119847 2万+

华为OD机考双机位A卷 - 开心消消乐(Java & Python& JS & C/C++ & GO )

华为OD机考双机位A卷 - 开心消消乐(OD上机考试双机位A卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 1266

PHPStorm携手ThinkPHP8:开启高效开发之旅

本文围绕使用 PHPStorm 进行 ThinkPHP8 开发展开,先介绍开发环境搭建与 Xdebug 配置,再阐述 PHPStorm 集成 ThinkPHP8 的步骤,包括项目导入、解释器和服务器配置。还讲解了项目开发基础、数据库操作、高级技巧、调试处理及部署上线等内容,为开发者提供了从环境搭建到项目上线的完整指引,助力高效开展 ThinkPHP8 开发工作。

邓邓子的博客 1542

SpringCloud Alibaba框架都有啥啊

总结一下SpringCloud Alibaba都集成了哪些组件及各自的作用,希望对SpringCloud Alibaba框架有个全面的认识,后面再根据每个组件深入研究探讨

java后端开发的博客,不仅仅是后端开发 9931

【并发编程五】c++进程通信——共享内存(shared memmory)

现代操作系统,对于内存管理,采⽤的是虚拟内存技术,也就是每个进程都有⾃⼰独⽴的虚拟内存空间,不同进程的虚拟内存映射到不同的物理内存中。所以,即使进程 A中 和 进程 B中 的虚拟地址是⼀样的,其实访问的是不同的物理内存地址,对于数据的增删查改互不影响。这样这个进程写⼊的东⻄,另外⼀个进程⻢上就能看到了,都不需要拷⻉来拷⻉去,传来传去,⼤⼤提⾼了进程间通信的速度。⽤了共享内存通信⽅式,带来新的问题,那就是如果多个进程同时修改同⼀个共享内存,很有可能就冲突了。那共享内存的⽅式,就很好的解决了这⼀问题。

junxuezheng的博客 1万+

SpringCloud Alibaba 实战,搭建第一个SpringCloud Alibaba项目

搭建AlibabaCloud 首先搭建几个环境全部在Linux下 1、nacos 注册中心 2、sentinel 流量控制,断路 文档 3、apache-skywalking-apm-bin 链路跟踪 4、Rocketmq 的使用 项目下载地址 sentinel JAR下载地址 介绍 NACOS 命名空间的使用 | 创建带有分组的配置、通过配置设置使用的那个分组、然后访问测试显示dev 项目如下 在这里插入代码片 首先创建pom工程 ***Alibaba-Clo.

penggerhe的博客 2万+

【Unity Shader】Special Effects(十二)Glow 外发光(UI)

Properties_GlowColor ("外发光颜色", Color) = (0, 0, 0, 1)_GlowIntensity("外发光强度", Range(0, 1)) = 1参数详解:_GlowColor:外发光颜色,指定外发光的显示颜色。_GlowIntensity:外发光强度,指定外发光的显示强度,0为不可见,1为最强强度。

神码编程 925

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

《SpringCloud Alibaba》实战

文章目录一、 一、 安装启动Nacos 在服务端加依赖

x-dragon8899的博客 2万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SpringCloud Alibaba 教程

SpringCloud Alibaba

爱码猿的博客 9345

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SpringCloud(十)——Spring Cloud Alibaba组件

该微服务工具集是分布式应用开发的一整套解决方案。换句话说,该工具集为分布式应用开发提供了一站式解决方案,其中包含开发分布式应用的所有组件。

老程的小白博客空间 4832

SpringCloud & SpringCloud Alibaba基本介绍

SpringCloud & SpringCloud Alibaba基本介绍

爱笑的boy的博客 1823

SpringCloud-Alibaba介绍

SpringCloud-Alibaba介绍 开篇 大家都知道,SpringCloud Alibaba是在SpringCloud基础上开发并开源的一套微服务架构体系。那么,肯定会有小伙伴要问:在微服务领域,SpringCloud已经很火了,为何还要弄出个SpringCloud Alibaba?这不是又要增加我的学习成本吗?今天,我们就来一起聊聊这个话题。 关系 Dubbo与SpringCloud 在之前的微服务架构中,SpringCloud和Dubbo可以说是微服务架构中两种最具代表性的框架(严格意义上来说S

weixin_45203607的博客 2984

springcloud alibaba

springcloud alibaba 版本说明 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E#%E6%AF%95%E4%B8%9A%E7%89%88%E6%9C%AC%E4%BE%9D%E8%B5%96%E5%85%B3%E7%B3%BB%E6%8E%A8%E8%8D%90%E4%BD%BF%E7%94%A8 毕业版本 依赖管理 Spring Cloud Ali

weixin_43014205的博客 345

springcloud(一)——spring-cloud-alibaba集成rocketmq

前言 在之前的工作中,微服务框架使用的是springcloud,消息中间件使用的rocketmq,这段时间看到阿里出了spring cloud alibaba集成了rocketmq,出于好奇,写了个demo 一些概念 官方对 Spring Cloud Stream 的一段介绍:Spring Cloud Stream 是一个用于构建基于消息的微服务应用框架。基于 SpringBoot 创建具有生产...

weixin_43087333的博客 8696

springcloud-alibaba生态环境

为什么要是用cloud-alibaba? 与老牌的cloud的几大组件有什么优势不同点?

胖虎儿的博客 6124

【Spring Cloud Alibaba】初识Spring Cloud Alibaba

微服务之SpringCloud Alibaba基本介绍

低调做人,低调编码,神码都是浮云 1725

SpringCloud Alibaba与Spring Cloud搭配方案

一简介 SpringCloudAlibaba致力于提供微服务开发一站式解决方案。此项目包括开发分布式应用微服务的必需组件,方便开发者通过SpringCloud编程模型轻松使用这些组件来开发分布式应用服务。 依托SpringCloudAlibaba,你只需要添加一些注解和少量配置,就可以将SpringCloud应用接入阿里微服务解决方案,通过阿里云中间件来迅速搭建分布式应用系统。 二开源地址 https://github.com/alibaba/spring-cloud-alibaba/ 三SpringClo

fwdwqdwq的博客 384
上一篇: Java设计模式(23种设计模式 重点介绍一些常用的)
低调$(生活)
博客等级 码龄6年 4689粉丝 92原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低调$(生活)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值