【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

相关推荐
5 小时前
java关于内部类
java·开发语言
好好沉淀5 小时前
Java 项目中的 .idea 与 target 文件夹
java·开发语言·intellij-idea
gusijin5 小时前
解决idea启动报错java: OutOfMemoryError: insufficient memory
java·ide·intellij-idea
To Be Clean Coder5 小时前
【Spring源码】createBean如何寻找构造器(二)——单参数构造器的场景
java·后端·spring
吨~吨~吨~5 小时前
解决 IntelliJ IDEA 运行时“命令行过长”问题:使用 JAR
java·ide·intellij-idea
你才是臭弟弟5 小时前
SpringBoot 集成MinIo(根据上传文件.后缀自动归类)
java·spring boot·后端
短剑重铸之日5 小时前
《设计模式》第二篇:单例模式
java·单例模式·设计模式·懒汉式·恶汉式
码农水水5 小时前
得物Java面试被问:消息队列的死信队列和重试机制
java·开发语言·jvm·数据结构·机器学习·面试·职场和发展
summer_du5 小时前
IDEA插件下载缓慢,如何解决?
java·ide·intellij-idea
东东5165 小时前
高校智能排课系统 (ssm+vue)
java·开发语言