阅读 291
【SpringCloud系列】 Nacos 监听与服务发现

【SpringCloud系列】 Nacos 监听与服务发现

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

获取全部实例

根据服务名称从nacos server上获取所有服务实例:

Open API: /nacos/v1/ns/instance/list (GET)
SDK:
List<Instance> getAllInstances(String serviceName) throws NacosException;
List<Instance> getAllInstances(String serviceName,List<String> clusters) throws NacosException;
复制代码

调用方式:

NamingService namingService=NamingFactory.createNamingService(Systm.getProperty("serverAddr"));
List<Instance> instances=namingService.getAllInstances("server1");
复制代码
监听服务

监听服务是箭筒指定服务下的实例变化,客户端需要从nacos server上获取的实例必须是健康的,否则会造成客户端请求失败,监听服务机制让客户端及时感知服务提供者实例的变化

Open Api: /nacos/v1/ns/instance/list (GET)
SDK:
void subscribe(String serviceName,EventListenster listener) throws NacosException;
void subscribe(String serviceName,List<String> clusters,EventLister listener) throws NacosException;
复制代码

相关参数说明:

  • EventListener:当服务提供者实例发生上、下线时,会触发一个事件回调。

SpringBoot 集成Nacos 实现服务注册与发现

  1. 创建一个SpringBoot工程

  2. 添加maven依赖

<dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-discovery-spring-boot-starter</artifactId>
            <version>0.2.10</version>
 </dependency>
复制代码

创建Controller类,通过@NacosInjected注入Nacos的NamingService,并创建discovery方法,根据服务名称获取注册到Nacos上的服务地址

@RestController
public class DiscoveryController {

    @NacosInjected
    private NamingService namingService;
    
    public List<Instance> discovery(String serviceName) throws NacosException {
        return namingService.getAllInstances(serviceName);
    }
}
复制代码

在application.xml中添加Nacos服务地址的配置

nacos:
  discovery:
    server-addr: 127.0.0.1:8848
复制代码

通过SpringBootNacosApplication启动类启动工程,通过postman 发get请求http://127.0.0.1:9090/discovery?serviceName=server1 去Nacos服务器上查询服务名称server1所对应的地址信息,此时由于Nacos Server没有server1的服务实例,返回一个空的json数组。

之后通过Nacos提供的OpenApi,向Nacos Server注册一个名字为server1的服务。

http;//127.0.0.1:8848/nacos/v1/ns/instance?serviceName=server1&ip=127.0.0.1&port=9090

image-20211004150938351.png

再次访问http://127.0.0.1:9090/discovery?serviceName=server1返回服务实例的详细信息。

image-20211004150859155.png

文章分类
后端
文章标签