获取全部实例
根据服务名称从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 实现服务注册与发现
-
创建一个SpringBoot工程
-
添加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
再次访问http://127.0.0.1:9090/discovery?serviceName=server1返回服务实例的详细信息。