【04】微服务系列 之 Nacos 注册中心(服务发现)

微服务系列 之 Nacos 注册中心(服务发现)

前言

更新 pom.xml 文件

新增 test 依赖包的坐标,如下:

xml 复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

启动类添加注释

MachineApplication.java 启动类,添加 @EnableDiscoveryClient 注解,开启服务发现功能。

java 复制代码
package com.junjiu.microservices;

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

/**
 * program: microservices-demo
 * ClassName: MachineApplication
 * description:
 *
 * @author: 君九
 * @create: 2026-01-30 21:04
 * @version: 1.0
 **/
@EnableDiscoveryClient
@SpringBootApplication
public class MachineApplication {
    public static void main(String[] args) {
        SpringApplication.run(MachineApplication.class, args);
    }
}

撰写测试类

test 包中新增测试 MachineDiscoveryTest.java

注意:

  • 测试类所属的包路径,需和 MachineApplication.java 启动类相同。

DiscoveryClient

测试类方法,如下:

java 复制代码
    @Autowired
    DiscoveryClient discoveryClient;

    @Test
    public void discoveryClientTest() {

        System.out.println("服务名称:");
        discoveryClient.getServices().forEach(System.out::println);

        System.out.println("---------------------------");

        List<ServiceInstance> instances = discoveryClient.getInstances("service-machine");
        System.out.println("服务信息:");
        System.out.println(JSON.toJSONString(instances));

        for (ServiceInstance instance : instances) {
            System.out.println(instance.getHost() + ":" + instance.getPort());
        }

    }

输出日志如下:

java 复制代码
2026-01-30T21:44:13.187+08:00  INFO 19136 --- [service-machine] [remote.worker.0] com.alibaba.nacos.common.remote.client   : [db3981e9-7388-4dae-8604-747d980a92bf] Notify connected event to listeners.
2026-01-30T21:44:13.187+08:00  INFO 19136 --- [service-machine] [           main] com.alibaba.nacos.common.remote.client   : [db3981e9-7388-4dae-8604-747d980a92bf] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$ConnectResetRequestHandler
2026-01-30T21:44:13.187+08:00  INFO 19136 --- [service-machine] [remote.worker.0] com.alibaba.nacos.client.naming          : Grpc connection connect
2026-01-30T21:44:13.187+08:00  INFO 19136 --- [service-machine] [           main] com.alibaba.nacos.common.remote.client   : [db3981e9-7388-4dae-8604-747d980a92bf] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$$Lambda/0x000001b17c6ee078
service-machine
service-instance
---------------------------
2026-01-30T21:44:13.197+08:00  INFO 19136 --- [service-machine] [           main] com.alibaba.nacos.client.naming          : [SUBSCRIBE-SERVICE] service:service-machine, group:DEFAULT_GROUP, clusters: 
2026-01-30T21:44:13.197+08:00  INFO 19136 --- [service-machine] [           main] com.alibaba.nacos.client.naming          : [GRPC-SUBSCRIBE] service:service-machine, group:DEFAULT_GROUP, cluster: 
2026-01-30T21:44:13.214+08:00  INFO 19136 --- [service-machine] [           main] com.alibaba.nacos.client.naming          : init new ips(1) service: DEFAULT_GROUP@@service-machine -> [{"instanceId":"169.254.245.234#5826#DEFAULT#DEFAULT_GROUP@@service-machine","ip":"169.254.245.234","port":5826,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@service-machine","metadata":{"preserved.register.source":"SPRING_CLOUD","IPv6":"[2408:820c:8f1e:5650:54e7:c2f:4f57:3182]"},"ipDeleteTimeout":30000,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000}]
2026-01-30T21:44:13.220+08:00  INFO 19136 --- [service-machine] [           main] com.alibaba.nacos.client.naming          : current ips:(1) service: DEFAULT_GROUP@@service-machine -> [{"instanceId":"169.254.245.234#5826#DEFAULT#DEFAULT_GROUP@@service-machine","ip":"169.254.245.234","port":5826,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@service-machine","metadata":{"preserved.register.source":"SPRING_CLOUD","IPv6":"[2408:820c:8f1e:5650:54e7:c2f:4f57:3182]"},"ipDeleteTimeout":30000,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000}]
服务信息:
[{"host":"169.254.245.234","instanceId":"169.254.245.234#5826#DEFAULT#DEFAULT_GROUP@@service-machine","metadata":{"nacos.instanceId":"169.254.245.234#5826#DEFAULT#DEFAULT_GROUP@@service-machine","nacos.weight":"1.0","nacos.cluster":"DEFAULT","IPv6":"[2408:820c:8f1e:5650:54e7:c2f:4f57:3182]","nacos.ephemeral":"true","nacos.healthy":"true","preserved.register.source":"SPRING_CLOUD"},"port":5826,"scheme":"http","secure":false,"serviceId":"service-machine","uri":"http://169.254.245.234:5826"}]
169.254.245.234:5826

NacosDiscoveryClient

测试类方法,如下:

java 复制代码
    @Autowired
    NacosDiscoveryClient nacosDiscoveryClient;

    @Test
    public void nacosDiscoveryClientTest() {
        for(String serviceName : discoveryClient.getServices()) {
            System.out.println("=== 服务名称:" + serviceName);
            List<ServiceInstance> instances = nacosDiscoveryClient.getInstances(serviceName);
            for(ServiceInstance instance : instances) {
                System.out.println("--->>> 完整数据:" + JSON.toJSONString(instance));
                System.out.println("-->> IP:Port = " + instance.getHost() + ":" + instance.getPort());
                System.out.println();
            }
        }
    }

输出日志:

java 复制代码
2026-01-30T21:56:59.365+08:00  INFO 2544 --- [service-machine] [remote.worker.0] com.alibaba.nacos.common.remote.client   : [02e5c997-5625-4c6f-a6c1-f5834bbcdd6a] Notify connected event to listeners.
2026-01-30T21:56:59.365+08:00  INFO 2544 --- [service-machine] [remote.worker.0] com.alibaba.nacos.client.naming          : Grpc connection connect
2026-01-30T21:56:59.365+08:00  INFO 2544 --- [service-machine] [           main] com.alibaba.nacos.common.remote.client   : [02e5c997-5625-4c6f-a6c1-f5834bbcdd6a] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$ConnectResetRequestHandler
2026-01-30T21:56:59.365+08:00  INFO 2544 --- [service-machine] [           main] com.alibaba.nacos.common.remote.client   : [02e5c997-5625-4c6f-a6c1-f5834bbcdd6a] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$$Lambda/0x00000209d86f1998
=== 服务名称:service-machine
2026-01-30T21:56:59.374+08:00  INFO 2544 --- [service-machine] [           main] com.alibaba.nacos.client.naming          : [SUBSCRIBE-SERVICE] service:service-machine, group:DEFAULT_GROUP, clusters: 
2026-01-30T21:56:59.374+08:00  INFO 2544 --- [service-machine] [           main] com.alibaba.nacos.client.naming          : [GRPC-SUBSCRIBE] service:service-machine, group:DEFAULT_GROUP, cluster: 
2026-01-30T21:56:59.387+08:00  INFO 2544 --- [service-machine] [           main] com.alibaba.nacos.client.naming          : init new ips(1) service: DEFAULT_GROUP@@service-machine -> [{"instanceId":"169.254.245.234#5826#DEFAULT#DEFAULT_GROUP@@service-machine","ip":"169.254.245.234","port":5826,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@service-machine","metadata":{"preserved.register.source":"SPRING_CLOUD","IPv6":"[2408:820c:8f1e:5650:54e7:c2f:4f57:3182]"},"ipDeleteTimeout":30000,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000}]
2026-01-30T21:56:59.393+08:00  INFO 2544 --- [service-machine] [           main] com.alibaba.nacos.client.naming          : current ips:(1) service: DEFAULT_GROUP@@service-machine -> [{"instanceId":"169.254.245.234#5826#DEFAULT#DEFAULT_GROUP@@service-machine","ip":"169.254.245.234","port":5826,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@service-machine","metadata":{"preserved.register.source":"SPRING_CLOUD","IPv6":"[2408:820c:8f1e:5650:54e7:c2f:4f57:3182]"},"ipDeleteTimeout":30000,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000}]
--->>> 完整数据:{"host":"169.254.245.234","instanceId":"169.254.245.234#5826#DEFAULT#DEFAULT_GROUP@@service-machine","metadata":{"nacos.instanceId":"169.254.245.234#5826#DEFAULT#DEFAULT_GROUP@@service-machine","nacos.weight":"1.0","nacos.cluster":"DEFAULT","IPv6":"[2408:820c:8f1e:5650:54e7:c2f:4f57:3182]","nacos.ephemeral":"true","nacos.healthy":"true","preserved.register.source":"SPRING_CLOUD"},"port":5826,"scheme":"http","secure":false,"serviceId":"service-machine","uri":"http://169.254.245.234:5826"}
-->> IP:Port = 169.254.245.234:5826

=== 服务名称:service-instance
2026-01-30T21:56:59.515+08:00  INFO 2544 --- [service-machine] [           main] com.alibaba.nacos.client.naming          : [SUBSCRIBE-SERVICE] service:service-instance, group:DEFAULT_GROUP, clusters: 
2026-01-30T21:56:59.515+08:00  INFO 2544 --- [service-machine] [           main] com.alibaba.nacos.client.naming          : [GRPC-SUBSCRIBE] service:service-instance, group:DEFAULT_GROUP, cluster: 
2026-01-30T21:56:59.518+08:00  INFO 2544 --- [service-machine] [           main] com.alibaba.nacos.client.naming          : init new ips(1) service: DEFAULT_GROUP@@service-instance -> [{"instanceId":"169.254.245.234#5827#DEFAULT#DEFAULT_GROUP@@service-instance","ip":"169.254.245.234","port":5827,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@service-instance","metadata":{"preserved.register.source":"SPRING_CLOUD","IPv6":"[2408:820c:8f1e:5650:54e7:c2f:4f57:3182]"},"ipDeleteTimeout":30000,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000}]
2026-01-30T21:56:59.518+08:00  INFO 2544 --- [service-machine] [           main] com.alibaba.nacos.client.naming          : current ips:(1) service: DEFAULT_GROUP@@service-instance -> [{"instanceId":"169.254.245.234#5827#DEFAULT#DEFAULT_GROUP@@service-instance","ip":"169.254.245.234","port":5827,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@service-instance","metadata":{"preserved.register.source":"SPRING_CLOUD","IPv6":"[2408:820c:8f1e:5650:54e7:c2f:4f57:3182]"},"ipDeleteTimeout":30000,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000}]
--->>> 完整数据:{"host":"169.254.245.234","instanceId":"169.254.245.234#5827#DEFAULT#DEFAULT_GROUP@@service-instance","metadata":{"nacos.instanceId":"169.254.245.234#5827#DEFAULT#DEFAULT_GROUP@@service-instance","nacos.weight":"1.0","nacos.cluster":"DEFAULT","IPv6":"[2408:820c:8f1e:5650:54e7:c2f:4f57:3182]","nacos.ephemeral":"true","nacos.healthy":"true","preserved.register.source":"SPRING_CLOUD"},"port":5827,"scheme":"http","secure":false,"serviceId":"service-instance","uri":"http://169.254.245.234:5827"}
-->> IP:Port = 169.254.245.234:5827

启动多应用

如下截图中,可知:目前每个服务模块,只启动了一个服务,现在启动多个服务(仅端口不同)。

启多个服务,因生产环境一般高可用架构多服务部署,本次仅用模拟生产多个应用服务。

示例:MachineApplication

  1. 选择服务模块,鼠标右键,选择Copy Configuration...

    在配置框中的Program arguments 文本框填写如下,新增服务端口:--server.port=5828

  2. 启动新服务

    启动成功后,Nacos 服务中可查阅注册成功:

  3. 再次执行服务发现测试代码,输出日志如下:仍能发现新的服务

若有转载,请标明出处:https://blog.csdn.net/CharlesYuangc/article/details/157554818

相关推荐
NE_STOP12 小时前
Vide Coding--AI编程工具的选择
java
码云数智-园园12 小时前
C++20 Modules 模块详解
java·开发语言·spring
程序员黑豆12 小时前
JDK 下载安装与配置详细教程
java·前端·ai编程
霸道流氓气质12 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz13 小时前
Maven依赖冲突
java·服务器·maven
swordbob13 小时前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
咖啡八杯13 小时前
GoF设计模式——享元模式
java·spring·设计模式·享元模式
十五喵源码网13 小时前
基于springboot2+vue2的租房管理系统
java·毕业设计·springboot·论文笔记
摇滚侠13 小时前
IDEA 创建 Java 项目 手动整合 SSM 框架
java·ide·intellij-idea
源分享13 小时前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm