Kiroの编程指南 Kiroの编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • Java8 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • Netty
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 从零带你写netty
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • Java8 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • Netty
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 从零带你写netty
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
  • API网关

    • 网关基础知识小结
    • Gateway官方文档学习
  • 消息队列

    • RocketMQ

      • RocketMQ入门
      • SpringBoot整合RocketMQ
      • RocketMQ5.1.2源码解析
    • Kafka

      • Kafka基础小结
      • Kafka的下载安装以及使用
      • Kafka整合SpringBoot
      • Kafka可视化工具
  • Spring Cloud

    • Spring Cloud Alibaba 从入门到实战

      • 基础知识篇
      • 分布式配置
      • 服务注册与发现
        • 1、简介
        • 2、学习目标
        • 3、详细内容
        • 4、快速上手
        • 4.1 引入 Nacos Discovery 进行服务注册/发现
        • 4.2 使用 Nacos Discovery 进行服务注册/发现
          • 增加 Maven 依赖
          • 完整配置
          • 激活 Nacos Discovery 服务注册与发现
        • 5、Nacos Discovery 整合 Spring Cloud 服务调用
          • 第一种方式
          • 服务消费者激活 Nacos Discovery 服务注册与发现
          • 服务消费者使用 @LoadBalanced RestTemplate 实现服务调用
          • 第二种方式
          • 整合 Spring Cloud OpenFeign
          • 1 服务消费者添加依赖
          • 2 新增 Spring Cloud OpenFeign 服务声明接口
          • 3 激活服务声明接口
          • 4 实现服务调用
        • 6、Nacos Discovery 更多配置项信息
        • 7、Nacos Discovery Actuator Endpoint
        • 参考书籍
      • 分布式服务调用
      • 服务熔断和限流
      • 分布式消息(事件)驱动
      • 分布式事务
    • SpringCloud Stream学习
    • Nacos学习
  • 分布式事务

    • 认识Seata
  • 云存储

    • minio
  • 搜索引擎

    • Elasticsearch入门
  • 虚拟机

    • Linux基础小结
    • Linux环境搭建
    • 安装Docker
    • Docker入门
    • 配置桥接模式
    • 防火墙相关
    • 查看日志的六种命令详解
    • docker run指令
  • 微服务
  • Spring Cloud
  • Spring Cloud Alibaba 从入门到实战
Kiro
2023-09-26
目录

服务注册与发现

# 服务注册与发现

# 1、简介

Nacos Discovery 可以帮助您将服务自动注册到 Nacos 服务端并且能够动态感知和刷新某个服务实例的服务列表。除此之外,Nacos Discovery 也将服务实例自身的一些元数据信息 - 例如 host,port,健康检查 URL,主页等内容注册到 Nacos。

# 2、学习目标

  • 掌握 Nacos Discovery 实现 Spring Cloud 服务注册和发现
  • 掌握 Nacos Discovery 整合 Spring Cloud 负载均衡和服务调用
  • 理解 Nacos Discovery 高级特性:命名空间、安全控制、元数据、Nacos Watch 等

# 3、详细内容

  • 快速上手:使用 Nacos Discovery 进行服务注册/发现
  • 服务调用整合:实战 Nacos Discovery 整合 @LoadBalanced RestTemplate 以及 Open Feign
  • 运维特性:演示 Nacos Discovery 高级外部化配置以及 Endpoint 内部细节

# 4、快速上手

# 4.1 引入 Nacos Discovery 进行服务注册/发现

有两种方式:

  1. 脚手架引入
  2. maven 依赖导入

直接访问沙箱环境,有准备好的案例代码

依赖:

<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
1
2
3
4

# 4.2 使用 Nacos Discovery 进行服务注册/发现

# 增加 Maven 依赖

增加 Spring WebMVC 以及 Spring Boot Actuator Starter 依赖:

        <!-- Spring WebMVC Starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Spring Boot Actuator Starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
1
2
3
4
5
6
7
8
9
10

# 完整配置

# 应用服务 WEB 访问端口
server.port=8080

# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
spring.application.name=nacos-service
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public

# Actuator Web 访问端口
management.server.port=8081
management.endpoints.jmx.exposure.include=*
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 激活 Nacos Discovery 服务注册与发现

Aliyun Java Initializr 默认不会自动激活 Nacos Discovery 服务注册与发现,需要在引导类(main 方法所在类)标注 Spring Cloud 服务注册与发现标准注解:

@EnableDiscoveryClient
1

# 5、Nacos Discovery 整合 Spring Cloud 服务调用

从应用架构上,Spring Cloud 服务调用通常需要两个应用,一个为服务提供者 (Provider),一个为服务消费者(Consumer)。

从技术上,传统的 Spring Cloud 服务通讯方式是基于 REST 实现的,包好两种内建实现方法,分别是 @LoadBalanced RestTemplate 以及 Open Feign,两者均作用于服务消费者,而服务提供者仅为 WebMVC 或者 WebFlux 应用(需注册到注册中心)。

同时,还允许整合 Spring Cloud 负载均衡 API,实现自定义 REST 服务调用。至于,Spring Cloud Alibaba 引入 Dubbo 服务通讯方式,会在后续内容中单独讨论。

# 第一种方式

# 服务消费者激活 Nacos Discovery 服务注册与发现

与应用 nacos-discovery-provider-sample 实现一样,在引导类上标注 @EnableDiscoveryClient

# 服务消费者使用 @LoadBalanced RestTemplate 实现服务调用

前文提到 @LoadBalanced RestTemplate 是 Spring Cloud 内建的服务调用方式,因此需要在应用 nacos-discovery-consumer-sample 增加执行代码,消费应用 nacos-discovery-provider-sample REST 服务 /echo/{message} 。

故在引导类同包下新增 RestController 实现:

@RestController
public class RestTemplateController {

    @LoadBalanced
    @Autowired
    public RestTemplate restTemplate;

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @GetMapping("/call/echo/{message}")
    public String callEcho(@PathVariable String message) {
        // 访问应用 nacos-service 的 REST "/echo/{message}"
        return restTemplate.getForObject("http://nacos-service/echo/" + message, String.class);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 第二种方式

# 整合 Spring Cloud OpenFeign

Spring Cloud OpenFeign 是 Spring Cloud 基于 REST 客户端框架 OpenFeign 而构建,使得服务发现和负载均衡透明,开发人员只需关注服务消费者接口契约。

同时,Spring Cloud OpenFeign 可以与 @LoadBalanced RestTemplate 共存,因此,可在原有应用 nacos-discovery-consumer-sample 的基础上,增加 Maven 依赖和代码实现整合。

官方文档:https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/

# 1 服务消费者添加依赖

        <!-- Spring Cloud OpenFeign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>
1
2
3
4
5
6

# 2 新增 Spring Cloud OpenFeign 服务声明接口

@FeignClient("nacos-service") // 指向服务提供者应用
public interface EchoService {

    @GetMapping("/echo/{message}")
    String echo(@PathVariable("message") String message);
}
1
2
3
4
5
6

# 3 激活服务声明接口

仅需在引导类标注 @EnableFeignClients,如果声明接口与引导类不在同一个包的话,请使用 basePackages 属性指定。

也可在同一包下新增一个配置类来实现激活

@Configuration
@EnableFeignClients // 激活 @FeignClient
public class NacosDiscoveryConsumerConfiguration {

}
1
2
3
4
5

# 4 实现服务调用

新增 OpenFeignController 类

@RestController
public class OpenFeignController {

    @Autowired
    private EchoService echoService;

    @GetMapping("/feign/echo/{message}")
    public String feignEcho(@PathVariable String message) {
        return echoService.echo(message);
    }
}
1
2
3
4
5
6
7
8
9
10
11

# 6、Nacos Discovery 更多配置项信息

参考博客:[Spring Cloud Nacos Discovery Starter配置项信息](https://blog.csdn.net/qq_39458487/article/details/123644720#:~:text=配置项 Key 默认值 说明 服务端地址 spring.cloud.nacos.discovery.server-addr 无 NacosServer,服务名 spring.cloud.nacos.discovery.service %24 {spring.application.name} 给当前的服务命名 服务分组 spring.cloud.nacos.discovery.group DEFAULT_GRO_spring.cloud.nacos.discovery.group)

# 7、Nacos Discovery Actuator Endpoint

执行器端点

Nacos Discovery 内部提供了一个 Endpoint, 对应的 endpoint id 为 nacos-discovery,其 Actuator Web Endpoint URI 为 /actuator/nacos-discovery

注:使用 Nacos Config Spring Cloud 1.x 版本的话,其 URI 地址则为 /nacos-discovery

Endpoint 暴露的 json 中包含了两种属性:

  • subscribe: 显示了当前服务有哪些服务订阅者。
  • NacosDiscoveryProperties: 当前应用 Nacos 的基础配置信息。

端口配置如下:

# 应用服务 WEB 访问端口
server.port=8080

# Actuator Web 访问端口
management.server.port=8081
management.endpoints.jmx.exposure.include=*
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
1
2
3
4
5
6
7
8

直接访问:http://127.0.0.1:8081/actuator/nacos-discovery,服务响应的内容如下:

{
    "subscribe":[
        {
            "jsonFromServer":"",
            "name":"nacos-provider",
            "clusters":"",
            "cacheMillis":10000,
            "hosts":[
                {
                    "instanceId":"30.5.124.156#8081#DEFAULT#nacos-provider",
                    "ip":"30.5.124.156",
                    "port":8081,
                    "weight":1,
                    "healthy":true,
                    "enabled":true,
                    "cluster":{
                        "serviceName":null,
                        "name":null,
                        "healthChecker":{
                            "type":"TCP"
                        },
                        "defaultPort":80,
                        "defaultCheckPort":80,
                        "useIPPort4Check":true,
                        "metadata":{

                        }
                    },
                    "service":null,
                    "metadata":{

                    }
                }
            ],
            "lastRefTime":1541755293119,
            "checksum":"e5a699c9201f5328241c178e804657e11541755293119",
            "allIPs":false,
            "key":"nacos-provider",
            "valid":true
        }
    ],
    "NacosDiscoveryProperties":{
        "serverAddr":"127.0.0.1:8848",
        "endpoint":"",
        "namespace":"",
        "logName":"",
        "service":"nacos-provider",
        "weight":1,
        "clusterName":"DEFAULT",
        "metadata":{

        },
        "registerEnabled":true,
        "ip":"30.5.124.201",
        "networkInterface":"",
        "port":8082,
        "secure":false,
        "accessKey":"",
        "secretKey":""
    }
}
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61

# 参考书籍

重磅下载 | Java 开发者必备手册《Spring Cloud Alibaba 从入门到实战》,阿里双11同款!-阿里云开发者社区 (aliyun.com) (opens new window)

上次更新: 2025/4/29 05:15:44
分布式配置
分布式服务调用

← 分布式配置 分布式服务调用→

Theme by Vdoing | Copyright © 2022-2025 Kiro | 豫ICP备2021022101号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式