软件开发定制定制SpringCloud Alibaba Nacos服务注册和配置中心

SpringCloud Alibaba

软件开发定制定制官网下载地址:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md

官网地址:https://spring.io/projects/spring-cloud-alibaba#overview

软件开发定制定制官方参考手册:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html

1、主要功能

  1. 软件开发定制定制服务限流降级:默认支持 WebServlet、WebFlux、OpenFeign、RestTemplate、Spring Cloud Gateway、Zuul、Dubbo 和 RocketMQ 软件开发定制定制限流降级功能的接入,软件开发定制定制可以在运行时通过控制软件开发定制定制台实时修改限流降级规则,软件开发定制定制还支持查看限流降级 Metrics 监控。
  2. 软件开发定制定制服务注册与发现:适配 Spring Cloud 软件开发定制定制服务注册与发现标准,软件开发定制定制默认集成了 Ribbon 的支持。
  3. 软件开发定制定制分布式配置管理:软件开发定制定制支持分布式系统中的外部化配置,软件开发定制定制配置更改时自动刷新。
  4. 消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
  5. 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。
  6. 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  7. 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
  8. 阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

2、组件

  1. :把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
  2. :一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  3. :一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
  4. :阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
  5. : 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  6. : 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
  7. : 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

3、核心Maven依赖

<dependencyManagement>    <dependencies>        <dependency>            <groupId>com.alibaba.cloud</groupId>            <artifactId>spring-cloud-alibaba-dependencies</artifactId>            <version>2.2.9.RELEASE</version>            <type>pom</type>            <scope>import</scope>        </dependency>    </dependencies></dependencyManagement>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

SpringCloud Alibaba 服务注册和配置中心

1、简介

GitHub地址:https://github.com/alibaba/Nacos

中文官网地址:https://nacos.io/zh-cn/

1.1、为什么叫Nacos

前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service。

1.2、Nacos是什么

一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos就是注册中心 + 配置中心的组合 【等价于】 Nacos = Eureka+Config +Bus

1.3、Nacos能干什么

  1. 替代Eureka做服务注册中心
  2. 替代Config做服务配置中心

1.4、下载地址

官网下载地址:https://github.com/alibaba/nacos/releases/tag/2.1.1

选择历史版本:https://github.com/alibaba/nacos/tags?after=1.3.1

指定下载历史版本:https://github.com/alibaba/nacos/releases/tag/1.1.4

服务注册中心对比

服务注册与发现框架CAP模型控制台管理社区活跃的
EurekaAP支持
ZookeeperCP不支持
ConsulCP支持
NacosAP支持

2、win安装与运行

Nacos 依赖 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 环境,请确保是在以下版本环境中安装使用:

  1. 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  2. 64 bit JDK 1.8+;
  3. Maven 3.2.x+;

其实不管是Linux还是win系统都可以运行的,各自都准备了不同的启动文件

2.2、本地解压

2.3、运行Nacos

启动命令(standalone代表着单机模式运行,非集群模式):

startup.cmd -m standalone
  • 1

2.4、访问控制台

2.5、Windows关闭进程

shutdown.cmd
  • 1

或者双击shutdown.cmd运行文件。

3、Linux安装与运行

必须要有前置环境才能运行

3.1、解压下载下载包

需要在官网上下载到.gz文件再进行下面的命令进行解压

unzip -xvf nacos-server-2.1.1.tar.gz# 或tar -xvf nacos-server-2.1.1.tar.gz# 进入nacos文件cd nacos/bin
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.2、启动服务器

注:Nacos的运行需要以至少2g、4g、60g*3的机器配置下运行。

启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone
  • 1

3.3、杀死进程

sh shutdown.sh
  • 1

4、Nacos作为服务注册中心演示

4.1、基于Nacos的服务提供者模块cloudalibaba-provider-payment9001

4.1.1、修改pom.xml配置文件

父级pom.xml依赖中必须有阿里巴巴的

<dependency>    <groupId>com.alibaba.cloud</groupId>    <artifactId>spring-cloud-alibaba-dependencies</artifactId>    <version>2.1.0.RELEASE</version>    <type>pom</type>    <scope>import</scope></dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

当前项目的依赖

<dependencies>    <!--SpringCloud ailibaba nacos -->    <dependency>        <groupId>com.alibaba.cloud</groupId>        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>    </dependency>    <!-- SpringBoot整合Web组件 -->    <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>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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

4.1.2、添加YAML配置文件

server:  port: 9001spring:  application:    name: nacos-payment-provider  cloud:    nacos:      discovery:        server-addr: localhost:8848 # 配置Nacos地址# 向外暴露端口management:  endpoints:    web:      exposure:        include: '*'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

4.1.3、添加服务中心启动类

package com.zcl.springcloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/** * 描述:Nacos服务注册中心启动类 * * @author zhong * @date 2022-09-26 15:34 */@SpringBootApplication@EnableDiscoveryClientpublic class PaymentMain9001 {    public static void main(String[] args) {        SpringApplication.run(PaymentMain9001.class, args);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

4.1.4、创建基本的业务接口

package com.zcl.springcloud.controller;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;/** * 描述:控制器 * * @author zhong * @date 2022-09-26 15:35 */@RestControllerpublic class PaymentController {    @Value("${server.port}")    private String serverPort;    @GetMapping(value = "/payment/nacos/{id}")    public String getPayment(@PathVariable("id") Integer id)    {        return "nacos registry, serverPort: "+ serverPort+"\t id"+id;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

4.1.5、启动项目测试

  1. 启动Nacos服务

  2. 启动本模块9001

  3. 查看nacos控制台信息

    服务名称在YAML配置文件里面配置了

  4. 访问控制器接口:http://localhost:9001/payment/nacos/1

4.2、新建cloudalibaba-provider-payment9002服务提供者【实现负载均衡】

如下步骤都参考4.1步骤实现,修改本模块的端口即可

4.2.1、创建模块

4.2.2、添加pom.xml依赖

4.2.3、添加YAML配置文件

4.2.4、添加启动类

4.2.5、创建基础控制器接口

4.3、拷贝虚拟端口映射

  1. 拷贝虚拟端口

  2. 修改启动端口

  3. 访问Nacos控制台

    点击微服务名称的详情进入查看

4.4、基于Nacos的服务消费者

4.4.1、新建cloudalibaba-consumer-nacos-order83消费者模块

4.4.2、添加pom.xml依赖

<dependencies>    <!--SpringCloud ailibaba nacos -->    <dependency>        <groupId>com.alibaba.cloud</groupId>        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>    </dependency>    <!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->    <dependency>        <groupId>com.zcl.springcloud</groupId>        <artifactId>cloud-api-commons</artifactId>        <version>${project.version}</version>    </dependency>    <!-- SpringBoot整合Web组件 -->    <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>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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

nacos默认是引入了ribbon实现了负载均衡的,由于上面创建了两个消费者9001、9002可以在下面的演示观察到

4.4.3、添加YAML配置文件

server:  port: 83spring:  application:    name: nacos-order-consumer  cloud:    nacos:      discovery:        server-addr: localhost:8848# 消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)service-url:  nacos-user-service: http://nacos-payment-provider
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

service-url是自定义的配置文件,后面进行OpenFeign远程调用的时候会读取到

4.4.4、创建项目启动类

package com.zcl.springcloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/** * 描述:nacos项目启动类 * * @author zhong * @date 2022-09-26 16:07 */@SpringBootApplication@EnableDiscoveryClientpublic class OrderNacosMain83 {    public static void main(String[] args) {        SpringApplication.run(OrderNacosMain83.class, args);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

4.4.5、业务实现

1、添加RestTemplate配置类

package com.zcl.springcloud.config;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.client.RestTemplate;/** * 描述:RestTemplate 远程调用配置类 * * @author zhong * @date 2022-09-26 16:09 */@Configurationpublic class ApplicationContextBean {    /**     * 开启远程调用和负载均衡     * @return     */    @Bean    @LoadBalanced    public RestTemplate getRestTemplate() {        return new RestTemplate();    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

2、添加控制器接口

package com.zcl.springcloud.controller;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;import javax.annotation.Resource;/** * 描述:消费者控制器接口 * * @author zhong * @date 2022-09-26 16:12 */@RestControllerpublic class OrderNacosController {    @Resource    private RestTemplate restTemplate;    /**     * 注入当前调用的微服务地址     */    @Value("${service-url.nacos-user-service}")    private String serverURL;    @GetMapping("/consumer/payment/nacos/{id}")    public String paymentInfo(@PathVariable("id") Long id)    {        return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

4.4.6、启动项目测试

  1. 查看nacos控制台

  2. 访问当前模块的端口远程访问服务提供者,查看是否有实现负载均衡

4.5、服务注册中心对比

4.5.1、Nacos生态图

4.5.2、Nacos与其他注册中心特性对比

NacosEurekaConsulCoreDNSZooKeeper
一致性协议CP+APAPCP/CP
健康检查TCP/HTTP/MySQL/Client BeatClient BeatTCP/HTTP/gRPC/Cmd/Cloent Beat
负载均衡权重/DSL/metadata/CMDBRibbonFabioRR/
雪崩保护支持支持不支持不支持不支持
自动注销实例支持支持不支持不支持支持
访问协议HTTP/DNS/UDPHTTPHTTP/DNSDNSTCP
监听支持支持支持支持不支持支持
多数据中心支持支持支持不支持不支持
跨注册中心支持不支持支持不支持不支持
SpringCloud集成支持支持支持不支持不支持
Dubbo集成支持不支持不支持不支持支持
K8s集成支持不支持支持支持不支持

4.5.3、服务实例

4.5.4、Nacos 支持AP和CP模式的切换

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

何时选择使用何种模式?

一般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。

当前主流的服务如 Spring cloud 和 Dubbo 服务,都适用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例

如果需要在服务级别编辑或者存储配置信息,那么 CP 是必须,K8S服务和DNS服务则适用于CP模式。

CP模式下则支持注册持久化实例,此时则是以 Raft 协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。

通过如下命令完成AP和CP的模式转换

curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
  • 1
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发