[阶段4 企业开发进阶] 7. 微服务--SpringCloud Alibaba

news2024/11/23 18:47:03

文章目录

  • 1 服务注册和配置中心Nacos
    • 1.1 Nacos简介
    • 1.2 Nacos作为服务注册中心
      • 服务提供者注册
      • 服务消费者注册和负载
      • 服务注册中心对比
    • 1.3 Nacos作为服务配置中心
      • 基础配置
      • 分类配置
        • DataID方案配置
        • Group方案配置
        • Namespace方案配置
    • 1.4 Nacos集群和持久化配置
  • 2 服务熔断和限流Sentinel

SpringCloud Alibaba

中文文档

服务限流降级:默认支持Servlet、Feign、RestTemplate、Dubbo和RocketMQ限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级Metrics监控

服务注册与发现:适配Spring Cloud服务注册与发现标准,默认集成Ribbon的支持

分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新

消息驱动能力:基于SpringCloudStream为微服务应用构建新消息驱动能力

阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据

分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于Cron表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有Worker(schedulerx-client)上执行

1 服务注册和配置中心Nacos

1.1 Nacos简介

Nacos:Dynamic Naming and Configuration Service

一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos就是注册中心+配置中心的组合(Eureka+Config+Bus)

快速入门

安装运行成功后访问http://localhost:8848/nacos(默认账号密码为nacos)

1.2 Nacos作为服务注册中心

服务提供者注册

1.新建模块cloudalibaba-provider-payment-9001

2.pom

<dependencies>

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </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.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>

3.yml

server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址

management:
  endpoints:
    web:
      exposure:
        include: '*'

4.主启动

@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain9001 {

    public static void main(String[] args) {
        SpringApplication.run(PaymentMain9001.class, args);
    }
}

5.业务

@RestController
@RequestMapping("/payment")
public class PaymentController {

    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id) {
        return "Nacos registry, server port: " + serverPort + "\t id" + id;
    }
}

6.测试

  1. 启动nacos和9001
  2. 访问http://localhost:9001/payment/nacos/1

在这里插入图片描述

服务消费者注册和负载

1.新建cloudalibaba-consumer-nacos-order-83

2.pom

3.yml

server:
  port: 83


spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848


#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url:
  nacos-user-service: http://nacos-payment-provider

4.主启动

5.配置

由于nacos自带负载均衡,其包引入ribbon,故配置resttemplate

@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate()
    {
        return new RestTemplate();
    }
}

5.业务

@Slf4j
@RestController
@RequestMapping("/consumer")
public class OrderNacosController {
    @Resource
    private RestTemplate restTemplate;

    @Value("${service-url.nacos-user-service}")
    private String serverURL;

    @GetMapping(value = "/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Long id)
    {
        return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
    }

}

6.测试

  1. 启动nacos、9001、9002、83
  2. 访问http://localhost:83/consumer/payment/nacos/1

服务注册中心对比

在这里插入图片描述

Nacos支持AP和CP模式的切换

C是所有节点在同一时间看到的数据是一致的,而A的定义是所有的请求都会收到响应

一般来说,

如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么可以选择AP模式。当前主流的服务如SpringCloud和Dubbo服务,都适用于AP模式。AP模式为服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例

如果需要在服务级别编辑或者存储配置信息,那么CP是必须,K8S服务和DNS服务则适用于CP模式。CP模式下则支持注册持久化实例,此时则以Raft协议为集群运行模式,该模式下注册实例之前必须先注册微服务,如果服务不存在,则返回错误

# 模式切换
curl -X POST '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
服务注册与发现框架CAP模型控制台管理社区活跃度
EurekaAP支持低(2.X版本闭源)
ZookeeperCP不支持
ConsulCP支持
NacosAP支持

1.3 Nacos作为服务配置中心

基础配置

1.新建cloudalibaba-config-nacos-client-3377

2.pom

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

3.yml

Nacos与SpringCloud Config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置后,才能保证项目的正常启动,SpringBoot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application

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格式的配置
        
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

application.yml

spring:
  profiles:
    active: dev # 表示开发环境
    #active: test # 表示测试环境
    #active: info

4.主启动

5.业务

@RefreshScope:通过SpringCloud原生注解@RefreshScope实现配置的自动更新

@RestController
@RefreshScope //支持Nacos的动态刷新功能。
public class ConfigClientController {
    
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

Nacos中匹配规则

Nacos中的dataid的组成格式及与SpringBoot配置文件中的匹配规则

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

公式

# nacos-config-client-dev.yaml
${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

在这里插入图片描述

在这里插入图片描述

测试

  1. 启动需要在nacos客户端-配置管理-配置管理模块下有对应的yaml文件
  2. 运行cloud-config-nacos-client-3377
  3. 调用接口查看配置信息 http://localhost:3377/config/info

自带动态刷新

修改Nacos中的yaml配置文件,再次调用查看配置的接口,就会发现配置已经刷新

分类配置

多环境多项目管理的问题

问题1

实际开发中,一个系统会准备

  • dev开发环境
  • test测试环境
  • prod生产环境

如何保证指定环境启动时服务能正确读取到Nacos相应环境的配置文件?

问题2

一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又会有相应的开发环境、测试环境、预发环境、正式环境等,

如何对这些微服务配置进行管理?

配置管理

在这里插入图片描述

命名空间

在这里插入图片描述

Namespace+Group+DataID

1.是什么

类似Java里面的包名和类名,最外层的namespace可以用于区分部署环境,Group和DataID逻辑上区分两个目标对象

2.三种情况

在这里插入图片描述

默认情况

Namespace=public, Group=DEFAULT_GROUP,默认Cluster是DEFAULT

  • Nacos默认的命名空间是public,Namespace主要用于实现隔离

  • Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去

  • Service就是微服务,一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分

  • Instance就是微服务实例

DataID方案配置

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

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

通过spring.profiile.active属性进行多环境下配置文件的读取

spring:
  profiles:
    active: dev # 表示开发环境
    #active: test # 表示测试环境
    #active: info

Group方案配置

通过Group实现环境区分,新建Group,在Nacos图形界面控制台新建配置文件

在这里插入图片描述

bootstrap+application

在config下增加一条group的配置,可以配置为DEV_GROUP或者TEST_GROUP

# 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方案配置

新建dev/test的Namespace

在这里插入图片描述

在这里插入图片描述

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: 7d8f0f5a-6a53-4785-9686-dd460158e5d4

application.yml

spring:
  profiles:
    active: dev # 表示开发环境
    #active: test # 表示测试环境
    #active: info

1.4 Nacos集群和持久化配置

集群部署说明

默认Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决该问题,Nacos采用集中式存储的方式来支持集群化部署,目前仅支持MYSQL的存储

[待补充]

2 服务熔断和限流Sentinel

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/138717.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

指针仪表读数识别系统 yolov7

指针仪表读数识别系统通过 yolov7opencv计算机视觉分析技术,利用现场摄像头可以自动识别指针型仪表读数并将读数回传给平台节省人工巡检读表的时间。YOLOv7 在 5 FPS 到 160 FPS 范围内&#xff0c;速度和精度都超过了所有已知的目标检测器&#xff0c;并在V100 上&#xff0c;…

【日常系列】LeetCode《24·贪心1》

数据规模->时间复杂度 <10^4 &#x1f62e;(n^2) <10^7:o(nlogn) <10^8:o(n) 10^8<:o(logn),o(1) 内容 lc 455 &#xff1a;分发饼干 - 贪心思想 https://leetcode.cn/problems/assign-cookies/ 提示&#xff1a; 1 < g.length < 3 * 10^4 0 < s.len…

配置双网卡聚合

一 服务器多网卡聚合的意义 1、多网卡聚合&#xff0c;可以起到网络链路冗余作用&#xff0c;当故障发生时&#xff0c;网络自动切换&#xff0c;保证业务数据不中断。 2、多网卡聚合成一条虚拟链路&#xff0c;可实现网络带宽提升&#xff0c;如2个1000Mbps的网卡聚合&#…

【收藏】使用Google Colab随时随地运行Python代码

Colab官网 什么是 Colab? Colab,或“Colaboratory”,允许您在浏览器中编写和执行 Python,不需要依赖本地资源。具有以下优势: 需要零配置免费使用GPU轻松分享几大非常方便的特性: 和Google Drive无缝融合 可以将文件存储在Google Drive里面,同时也可以从Google Driv…

TiDB性能调优

文章目录一、 TiDB 常见配置优化1.1 限制 SQL 内存使用和执行时间1.1.1 执行时间限制1.1.2 内存使用限制1.2 事务重试设置1.3 Join 算子优化1.4 常见 Mysql 兼容问题1.5 其他优化项二、TiKV优化2.1 TiKV 线程池优化2.1.1 GRPC2.1.2 Scheduler2.1.3 Raftstore2.1.4 UnifyReadPoo…

对象存储服务MinIO

1. MinIO简介 对象存储的方式对比 分布式文件系统 MinIO概述: 1.MinIO基于Apache License v2.0开源协议的对象存储服务&#xff0c;可以做为云存储的解决方案用来保存海量的图片&#xff0c;视频&#xff0c;文档。 2.Golang语言实现&#xff0c;配置简单&#xff0c;单行命令…

学习css3,使用代码实现一根心爱的二踢脚

2023春节快到了&#xff0c;虽然还在上班&#xff0c;但心情早已开始激动&#xff0c;感叹2022终将过去&#xff0c;喜迎2023兔年吧。让我以激动的心情&#xff0c;利用所学css3代码知识&#xff0c;实现一根心爱的二踢脚吧。 目录 1、实现思路 2、实现二踢脚的主体圆柱部分…

数据的存储(1)数据类型,整型在内存中的存储

TIPS 1. 函数递归必须存在限制条件。 2. 一维数组与二维数组在内存当中是连续存放的&#xff0c;二维数组的话反正也是一行一行往下走。如果能知道起始地址的话&#xff0c;后面顺藤摸瓜会很容易。 3. 数组越界的话&#xff0c;C语言本身是不做检查的。数组传参传的是数组首…

【跟学C++】面向对象三大特征——继承(Study20)

文章目录1、了解继承2、基类与派生类(父类与子类)2.1、概念2.2、案例展示3、构造顺序与析构顺序4、继承种类4.1、私有继承4.2、保护继承4.3、多继承5、总结 【说明】 大家好&#xff0c;本专栏主要是跟学C内容&#xff0c;自己学习了这位博主【 AI菌】的【C21天养成计划】&…

十五、类加载器、反射

类加载器 1类加载器【理解】 作用 负责将.class文件&#xff08;存储的物理文件&#xff09;加载在到内存中 2类加载的过程【理解】 类加载时机 创建类的实例&#xff08;对象&#xff09;调用类的类方法访问类或者接口的类变量&#xff0c;或者为该类变量赋值使用反射方式来…

excel制表基础:规范的制表理念和思路让效率提升 下篇

在日常工作中我们会构建很多的表格&#xff0c;其实这些表格无论多少&#xff0c;都可以归结为三大类&#xff0c;分别为“源数据表”、“关系信息表”和“统计分析表”。上次我们提到了一套表格“统计的核心”——“源数据表”&#xff0c;今天继续为大家分享“关系信息表”和…

力扣(LeetCode)1802. 有界数组中指定下标处的最大值(C++)

贪心二分查找 贪心性质&#xff1a;对于数组中确定位置index的数&#xff0c;要使nums[index]最大&#xff0c;等于使得整个数组之和最小。 提示 &#xff1a;数组相邻元素之差的绝对值小于1&#xff0c;为了数组之和最小&#xff0c;从index往左&#xff0c;形成公差为1的递减…

python实现多张多格式图片转PDF并打包成exe

目录 主要思路 转PDF初始代码 转PDF最终代码 GUI界面设计代码 打包成可执行文件 完整代码 附录 主要思路 从文件夹中读取图片数据&#xff0c;然后将他们保存为PDF格式。 转PDF初始代码 不长&#xff0c;大概10行代码。 from PIL import Image from os import *def …

Stardust 案例:制作散景光斑

本文介绍使用 Ae 插件 Stardust 制作散景光斑的一般方法与步骤。效果视频1、新建合成。持续时间&#xff1a;10 秒。2、新建纯色图层&#xff0c;命名为“散景光斑”&#xff0c;然后添加 Stardust 效果。3、设置 Emitter&#xff08;发射器&#xff09; 。用一个长方形的发射器…

2023外贸人出国抢单攻略(附带2023年全球重要展会)

自11月底以来&#xff0c;全国陆续传来政府带团出国抢单的消息&#xff0c;让沉寂了3年之久的外贸行业热情高涨。这不仅预示着3年抗疫斗争的胜利&#xff0c;更意味着中国三驾马车之一的外贸行业开启了高速运转的车轮。“浙江带领万家企业去欧洲抢单&#xff01;”“福建省商务…

少儿Python每日一题(10):手机键盘

原题解答 本次的题目如下所示(原题出处:NOC) 一般的手机的键盘是这样的: 要按出英文字母就必须要按数字键多下。例如要按出 x 就得按 9 两下,第一下会出 w,而第二下会把 w 变成 x。0 键按一下会出一个空格。 你的任务是读取若干句只包含英文小写字母和空格的句子,求出要…

装备制造业ERP软件如何帮助企业做好物料齐套管理?

在生产制造过程中&#xff0c;要想提高生产效率&#xff0c;齐套管理是很重要的一环&#xff0c;会直接影响库存、交付和效率。而装备制造行业原料种类特别多&#xff0c;通用件也非常多&#xff0c;齐套检查工作十分复杂&#xff0c;深受以下问题困扰&#xff1a;1.装备制造业…

springmvc源码之HandlerMapping处理器映射器

系列文章目录 springmvc源码之Web上下文初始化 springmvc源码之DispatcherServlet前端控制器 springmvc源码之HandlerMapping处理器映射器 文章目录系列文章目录HandlerMapping处理器映射器实现类配置mvc:annotation-driven配置的作用RequestMappingHandlerMapping源码创建访问…

JAVA SpringBlade 微服务开发平台框架,企业级的SaaS多租户微服务平台,基于Spring Boot 2.7

SpringBlade微服务开发平台 完整代码下载地址:JAVA SpringBlade 微服务开发平台框架,企业级的SaaS多租户微服务平台 采用前后端分离的模式&#xff0c;前端开源两个框架&#xff1a;Sword (基于 React、Ant Design)、Saber (基于 Vue、Element-UI)后端采用SpringCloud全家桶&…

【谷粒商城基础篇】前端开发基础知识

谷粒商城笔记合集 分布式基础篇分布式高级篇高可用集群篇简介&环境搭建项目简介与分布式概念&#xff08;第一、二章&#xff09;基础环境搭建&#xff08;第三章&#xff09;整合SpringCloud整合SpringCloud、SpringCloud alibaba&#xff08;第四、五章&#xff09;前端知…