SpringCloud Alibaba(中)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: SpringCloud Alibaba

三种方案加载配置:


1. DataID方案


指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置


默认空间+默认分组+新建dev和test两个DataID

1673276255853.jpg

从而实现配置dev就加载dev,配置test就加载test


2. Group方案


新建两个配置文件,DataID为: nacos-config-client-info.yaml

1673276285889.jpg

1673276295368.jpg

1673276303426.jpg

通过切换 config.group 为DEV_GROUP或TEST_GROUP,即可实现配置的切换。


3. Namespace方案

1673276315370.jpg

1673276329517.jpg

1673276344733.jpg

test命名空间一样,添加两个文件。


bootstrap.yml

# nacos配置
server:
  port: 3377
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: DEV_GROUP
        namespace: eaf79b3e-daa1-4a19-b5f1-7c4839e9b4a9
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml


加入了一行,namespace: 命名空间Id,测试,修改不同的命名空间Id,就可获取到不同的文件内容。


就好比有一个大型项目,需要部署在上海和杭州,命名空间就叫 HZ(杭州),SH(上海),项目下又有多个微服务,通过Group来命名属于项目中的哪个微服务,每个服务又有开发环境、测试环境、生产环境,最后再通过 application.yml中的spring.profiles.active区分更具体的环境。


获取配置文件的顺序:命名空间(默认public)》Group》Data Id


5. Nacos集群和持久化配置


https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

1673276383785.jpg

默认Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。


总不可能集群的每个节点我们都一个个去改吧?


为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。

1673276396324.jpg

1673276422529.jpg

Nacos默认自带的是嵌入式数据库derby 查看


1. derby到mysql切换配置步骤

nacos-server-1.1.4\nacos\conf目录下找到sql脚本

nacos-mysql.sql,数据库执行,注意里边是否有创建数据库,没有的话先执行Create DataBase

CREATE DATABASE nacos_config;
USE nacos_config;


nacos-server-1.1.4\nacos\conf目录下找到application.properties

最下边加入

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456


ok,重启Nacos,可以看到之前加入的命名空间、服务,都没有了,看到的是个全新的空记录界面,以前是记录进derby。


6. Linux版Nacos+MySQL生产环境配置


1673276481810.jpg

需要:1个Nginx+3个nacos注册中心+1个mysql


下载nacos:https://github.com/alibaba/nacos/releases


上传至 opt/,解压移动到mynacos下

cp -r nacos /mynacos/


1.Linux服务器上mysql数据库配置


根据 nacos/conf/nacos-mysql.sql文件,导表

mynacos/nacos/conf:cp application.properties.example application.properties
      vim application.properties


application.properties文件最后加入:

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456


2.Linux服务器上nacos的集群配置cluster.conf


复制出:cluster.conf

cluster.conf.example cluster.conf


内容:

1673276538930.jpg

这个IP不能写127.0.0.1,必须是Linux命令hostname -i能够识别的IP


3.编辑Nacos的启动脚本startup.sh,使它能够接受不同的启动端口


/mynacos/nacos/bin 目录下有startup.sh

1673276646066.jpg最下边是: -Dserver.port=${PORT}

1673276657844.jpg

依次启动3333,4444,5555


4. Nginx的配置,由它作为负载均衡器


修改 nginx/conf/nginx.conf

upstream cluster{
        server 127.0.0.1:3333;
        server 127.0.0.1:4444;
        server 127.0.0.1:5555;
    }
    server {
        listen       1111;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            #root   html;
            #index  index.html index.htm;
            proxy_pass http://cluster;
        }
./nginx -c /usr/local/nginx/conf/nginx.conf


访问:http://192.168.111.144:1111/nacos/#/login,新建一个配置,然后查看config_info表,里边有数据就ok.


7. SpringCloud Alibaba Sentinel实现熔断与限流


官网:https://github.com/alibaba/Sentinel


下载:https://github.com/alibaba/Sentinel/releases

1673276697448.jpg

官方使用手册:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_sentinel


解决服务使用中的各种问题:服务雪崩、服务降级、服务熔断、服务限流 …

1673276713850.jpg


1. 安装Sentinel控制台


下载:

1673276739614.jpg

运行:


环境:java8环境,8080端口不能被占用


java -jar sentinel-dashboard-1.7.0.jar


1673276750965.jpg

访问:http://localhost:8080,登录账号密码均为 sentinel

1673276767166.jpg

2. 初始化演示工程

新建Module, cloudalibaba-sentinel-service8401


pom

<dependencies>
        <!--SpringCloud ailibaba nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--SpringCloud ailibaba sentinel-datasource-nacos 后续做持久化用到-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
        <!--SpringCloud ailibaba sentinel -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!--openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- SpringBoot整合Web组件+actuator -->
        <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>
        <!--日常通用jar包配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.6.3</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>


yml

server:
  port: 8401
spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        #Nacos服务注册中心地址
        server-addr: localhost:8848
    sentinel:
      transport:
        #配置Sentinel dashboard地址
        dashboard: localhost:8080
        #默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口
        port: 8719
management:
  endpoints:
    web:
      exposure:
        include: '*'


主启动

@EnableDiscoveryClient
@SpringBootApplication
public class MainApp8401
{
    public static void main(String[] args) {
        SpringApplication.run(MainApp8401.class, args);
    }
}


业务类

@RestController
public class FlowLimitController
{
    @GetMapping("/testA")
    public String testA()
    {
        return "------testA";
    }
    @GetMapping("/testB")
    public String testB()
    {
        return "------testB";
    }
}


启动,查看Sentinel控制台,什么也没有,Sentinel采用的懒加载,需要先执行一次访问即可

http://localhost:8401/testA

1673276906577.jpg

可以看到sentinel8080正在监控微服务8401


3. 流控规则

1673276919389.jpg


4. 流控模式


直接(默认)

1.QBS(每秒的请求数量)

1673276935191.jpg

表示1秒钟内查询1次就是OK,若超过次数1,就直接-快速失败,报默认错误

访问:http://localhost:8401//testB

1673276944433.jpg

线程数

1673276961847.jpg

请求:http://localhost:8401/testB,一直刷,都没问题,这是因为方法执行时间太快,毫秒级别就响应了。


修改testB方法,记得IDEA启用热部署,否则重启后,限流规则会重置(目前还没有做持久化配置)

@GetMapping("/testB")
    public String testB()
    {
        try {
            TimeUnit.MILLISECONDS.sleep(800);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "------testB";
    }


访问:http://localhost:8401/testB,快速请求两次(F5两次),当线程数达到阈值时,直接限流。

1673276998914.jpg


2. 关联

当关联资源/testA的qps阀值超过1时,就限流/testB的Rest访问地址,当关联资源到阈值后限制配置好的资源名

1673277017133.jpg

postman模拟并发密集访问 关联资源 testA

1673275204335.jpg

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
16
分享
相关文章
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
66 1
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
本文介绍了如何使用Spring Cloud Alibaba 2023.0.0.0技术栈构建微服务网关,以应对微服务架构中流量治理与安全管控的复杂性。通过一个包含鉴权服务、文件服务和主服务的项目,详细讲解了网关的整合与功能开发。首先,通过统一路由配置,将所有请求集中到网关进行管理;其次,实现了限流防刷功能,防止恶意刷接口;最后,添加了登录鉴权机制,确保用户身份验证。整个过程结合Nacos注册中心,确保服务注册与配置管理的高效性。通过这些实践,帮助开发者更好地理解和应用微服务网关。
36 0
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
201 4
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
【SpringCloud Alibaba系列】Dubbo高级特性篇
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
本文介绍了 Dubbo-Admin 的安装和使用步骤。Dubbo-Admin 是一个前后端分离的项目,前端基于 Vue,后端基于 Spring Boot。安装前需确保开发环境(Windows 10)已安装 JDK、Maven 和 Node.js,并在 Linux CentOS 7 上部署 Zookeeper 作为注册中心。
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
【SpringCloud Alibaba系列】Dubbo基础入门篇
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
427 7
|
3月前
|
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
580 13
Spring Cloud Alibaba:一站式微服务解决方案

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等