《Spring Cloud Alibaba 从入门到实战》服务注册与发现

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。《Spring Cloud Alibaba 从入门到实战》服务注册与发现,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

服务注册与发现

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>

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>

完整配置

# 应用服务 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

激活 Nacos Discovery 服务注册与发现

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

@EnableDiscoveryClient

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);
    }
}

第二种方式

整合 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>
2 新增 Spring Cloud OpenFeign 服务声明接口
@FeignClient("nacos-service") // 指向服务提供者应用
public interface EchoService {

    @GetMapping("/echo/{message}")
    String echo(@PathVariable("message") String message);
}
3 激活服务声明接口

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

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

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

}
4 实现服务调用

新增 OpenFeignController

@RestController
public class OpenFeignController {

    @Autowired
    private EchoService echoService;

    @GetMapping("/feign/echo/{message}")
    public String feignEcho(@PathVariable String message) {
        return echoService.echo(message);
    }
}

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

直接访问: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":""
    }
}

参考书籍

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/189709.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!