【第5章】Spring Cloud之Nacos服务注册和服务发现

文章目录

  • 前言
  • 一、提供者
    • [1. 引入依赖](#1. 引入依赖)
    • [2.配置 Nacos Server 地址](#2.配置 Nacos Server 地址)
    • [3. 开启服务注册](#3. 开启服务注册)
  • 二、消费者
    • [1. 引入依赖](#1. 引入依赖)
    • [2.配置 Nacos Server 地址](#2.配置 Nacos Server 地址)
    • [3. 开启服务注册](#3. 开启服务注册)
  • 三、服务列表
  • 四、服务发现
    • [1. 获取服务列表](#1. 获取服务列表)
    • [2. 测试](#2. 测试)
      • [2.1 获取所有服务](#2.1 获取所有服务)
      • [2.2 根据服务名获取服务信息](#2.2 根据服务名获取服务信息)
  • 五、更多配置项
  • 总结

前言

本节通过实现一个简单的 echo service 演示如何在您的 Spring Cloud 项目中启用 Nacos 的服务注册和发现功能,如下图示:


一、提供者

1. 引入依赖

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.配置 Nacos Server 地址

${NACOS_SERVER_ADDR}是配置的环境变量

yml 复制代码
server:
  port: 9002
spring:
  application:
    name: provider-service
  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_SERVER_ADDR}
        username: nacos
        password: nacos

在使用 Nacos 服务发现和配置功能时,一定要配置 username 和 password 属性,否则会出现用户未找到异常!

3. 开启服务注册

java 复制代码
package org.example.nacos.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryProviderApplication {

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

}

二、消费者

1. 引入依赖

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.配置 Nacos Server 地址

yml 复制代码
server:
  port: 9000
spring:
  application:
    name: consumer-service
  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_SERVER_ADDR}
        username: nacos
        password: nacos

3. 开启服务注册

bash 复制代码
package org.example.nacos.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryConsumerApplication {

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

}

三、服务列表

四、服务发现

1. 获取服务列表

我们在消费者项目中获取nacos中的服务列表,并打印出来。

java 复制代码
package org.example.nacos.consumer.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

/**
 * Create by zjg on 2024/7/15
 */
@RequestMapping("/nacos/")
@RestController
public class NacosDiscoveryController {
    @Autowired
    DiscoveryClient discoveryClient;
    @RequestMapping("discovery")
    public void discovery(){
        List<String> services = discoveryClient.getServices();
        services.forEach(System.out::println);
    }
    @RequestMapping("discovery/instance")
    public void discovery(@RequestParam("serviceId") String serviceId){
        List<ServiceInstance> instances = discoveryClient.getInstances(serviceId);
        instances.forEach(instance->{
            System.out.println(instance.getHost()+":"+instance.getPort());
        });
    }
}

新版本的@RequestParam("serviceId"),用法略有改动,更加规范了,但是没那么灵活对开发者不是很友好!

2. 测试

2.1 获取所有服务

http://localhost:9000/nacos/discovery

bash 复制代码
consumer-service
provider-service

2.2 根据服务名获取服务信息

http://localhost:9000/nacos/discovery/instance?serviceId=provider-service

bash 复制代码
192.168.0.103:9002

五、更多配置项

配置项 key 默认值 说明
服务端地址 spring.cloud.nacos.discovery.server-addr
服务名 spring.cloud.nacos.discovery.service ${spring.application.name} 注册到Nacos上的服务名称,默认值为应用名称
权重 spring.cloud.nacos.discovery.weight 1 取值范围 1 到 100,数值越大,权重越大
网卡名 spring.cloud.nacos.discovery.network-interface 当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址
注册的IP地址 spring.cloud.nacos.discovery.ip 优先级最高
注册的IP地址类型 spring.cloud.nacos.discovery.ip-type 双栈地址 可以配置IPv4和IPv6两种类型,如果网卡同类型IP地址存在多个,希望制定特定网段地址,可使用spring.cloud.inetutils.preferred-networks配置筛选地址
注册的端口 spring.cloud.nacos.discovery.port -1 默认情况下不用配置,会自动探测
命名空间 spring.cloud.nacos.discovery.namespace 常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
AccessKey spring.cloud.nacos.discovery.access-key
SecretKey spring.cloud.nacos.discovery.secret-key
Metadata spring.cloud.nacos.discovery.metadata 使用Map格式配置
日志文件名 spring.cloud.nacos.discovery.log-name
集群 spring.cloud.nacos.discovery.cluster-name DEFAULT Nacos集群名称
接入点 spring.cloud.nacos.discovery.endpoint 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
是否集成LoadBalancer spring.cloud.loadbalancer.nacos.enabled false
是否开启Nacos Watch spring.cloud.nacos.discovery.watch.enabled false 可以设置成true来开启 watch
是否启用Nacos spring.cloud.nacos.discovery.enabled true 默认启动,设置为false时会关闭自动向Nacos注册的功能
用户名 spring.cloud.nacos.discovery.username nacos
密码 spring.cloud.nacos.discovery.password nacos

总结

回到顶部
中文文档
官方案例

相关推荐
RainbowSea4 小时前
12. LangChain4j + 向量数据库操作详细说明
java·langchain·ai编程
RainbowSea4 小时前
11. LangChain4j + Tools(Function Calling)的使用详细说明
java·langchain·ai编程
考虑考虑8 小时前
Jpa使用union all
java·spring boot·后端
用户3721574261358 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊9 小时前
Java学习第22天 - 云原生与容器化
java
渣哥11 小时前
原来 Java 里线程安全集合有这么多种
java
间彧11 小时前
Spring Boot集成Spring Security完整指南
java
间彧12 小时前
Spring Secutiy基本原理及工作流程
java
Java水解13 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆15 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试