Spring Boot项目怎么从Nacos注册中心上获取其他服务列表信息?

一、前言

在spring boot项目开发过程中,为了进行微服务之间的调用,我们一般会使用注册中心,比如Nacos。假设我们有一个业务需求,应用A需要从Nacos注册中心上获取服务信息进行分析,需要怎么实现呢?

二、开发步骤

1.搭建Nacos注册中心

Nacos注册中心的搭建,可以参考我之前的文章:nacos安装手册

2. 新建测试服务

我们新建一个Spring Boot项目作为测试服务,该服务没有任何业务逻辑,只是注册到Nacos注册中心上。

  1. 导入Nacos相关依赖

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2021.0.5.0</version>
    </dependency>
    
  2. 增加Nacos相关配置

    spring:
      application:
        name: testdemo
    
      cloud:
        nacos:
          discovery:
            enabled: true
            namespace: public
            username: nacos
            password: nacos
          server-addr: 127.0.0.1:8848
    
  3. 启动项目,通过注册查看是否注册成功

    在这里插入图片描述

可以看到此时测试应用已经成功注册到nacos注册中心了。

3.新建获取服务列表的应用

新建一个应用,用于获取注册中心上的服务列表,新建一个spring boot项目。

  1. 导入Nacos相关依赖

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2021.0.5.0</version>
    </dependency>
    
  2. 增加Nacos相关配置

    spring:
      application:
        name: getInstanceDemo
    
      cloud:
        nacos:
          discovery:
            enabled: true
            namespace: public
            username: nacos
            password: nacos
            register-enabled: false # 注意:该服务无需注册到注册中心上,只用于获取注册中心上的服务信息就行了
          server-addr: 127.0.0.1:8848
    
  3. 编写获取服务的测试逻辑

    import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
    import com.alibaba.nacos.api.exception.NacosException;
    import com.alibaba.nacos.api.naming.pojo.Instance;
    import com.alibaba.nacos.client.naming.NacosNamingService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.annotation.PostConstruct;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    @RestController
    public class InstanceController {
    
        /**
         * 获取nacos属性配置信息
         */
        @Autowired
        private NacosDiscoveryProperties nacosDiscoveryProperties;
    
        NacosNamingService nacosNamingService = null;
    
        @PostConstruct
        public void init() throws NacosException {
            /**
             * 构建获取nacos服务信息
             */
            nacosNamingService = new NacosNamingService(nacosDiscoveryProperties.getNacosProperties());
        }
    
        @RequestMapping("/getInstance")
        public Map<String, Object> getInstance() {
            Map<String, Object> resultMap = new HashMap<>();
            try {
                /**
                 * 获取服务名称为testdemo的服务列表信息
                 */
                List<Instance> instances = nacosNamingService.getAllInstances("testdemo");
                resultMap.put("200", instances);
            } catch (NacosException e) {
                e.printStackTrace();
                resultMap.put("500", e.getMessage());
            }
            return resultMap;
        }
    
    }
    

正常启动服务。

4.测试

  1. 等服务都启动好以后,访问测试接口

在这里插入图片描述

可以看到,服务列表信息获取成功了。

  1. 本地停止测试注册服务testdemo,重新访问测试接口

    在这里插入图片描述

此时获取的服务列表为空了。

更多nacos使用方法可以参考nacos官方手册:https://nacos.io/docs/latest/what-is-nacos/

相关推荐

  1. springboot 项目eureka注册中心切换为nacos+config

    2024-03-15 00:24:04       38 阅读
  2. 【微服务服务治理(Nacos注册中心

    2024-03-15 00:24:04       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-15 00:24:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-15 00:24:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-15 00:24:04       82 阅读
  4. Python语言-面向对象

    2024-03-15 00:24:04       91 阅读

热门阅读

  1. 探讨:MySQL和PostgreSQL谁更火

    2024-03-15 00:24:04       44 阅读
  2. python实现小红树上染色

    2024-03-15 00:24:04       38 阅读
  3. ubuntu20.04安装fpylll

    2024-03-15 00:24:04       38 阅读
  4. SQL Server 技术100问?

    2024-03-15 00:24:04       42 阅读
  5. 网络模型的保存和读取

    2024-03-15 00:24:04       38 阅读
  6. python-0004-django站点

    2024-03-15 00:24:04       38 阅读