我们集成SpringBoot来了解一下,他是怎么实现服务注册与发现的
1、创建一个SpringBoot工程:spring-boot-nacos-discovery
2、添加nacos依赖
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
<version>0.2.4</version>
</dependency>
3、创建一个DiscoveryController类,通过注解@NacosInjected注入Nacos的NamingService,并提供discovery方法,根据服务名称获得注册到Nacos上的服务地址
@RestController
public class DiscoveryController {
@NacosInjected
private NamingService namingService;
@GetMapping("/discovery")
public List<Instance> discovery(@RequestParam String serviceName) throws NacosException {
return namingService.getAllInstances(serviceName);
}
}
4、在springboot的配置文件中添加nacos访问地址
nacos.discovery.server-addr=127.0.0.1:8848
5、启动服务
启动完成之后,如果直接请求http://localhost:8080/discovery?serviceName=test
会先去Nacos服务器上查询服务名称test对应的地址信息,但是此刻NacosServer并没有对应的实例,所以请求这个接口,会返回一个空数组[]
1、先通过Nacos提供的API,想Nacos Server注册一个名字为test的服务
windows系统:直接使用接口调试工具,比如postman,直接请求http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=test&ip=127.0.0.1&port=8080
Linux系统:curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=test&ip=127.0.0.1&port=8080'
2、然后再请求http://localhost:8080/discovery?serviceName=test
会返回:
[ { "instanceId": "127.0.0.1#8080#DEFAULT#DEFAULT_GROUP@@test", "ip": "127.0.0.1", "port": 8080, "weight": 1, "healthy": false, "enabled": true, "ephemeral": true, "clusterName": "DEFAULT", "serviceName": "DEFAULT_GROUP@@test", "metadata": {}, "instanceHeartBeatInterval": 5000, "instanceHeartBeatTimeOut": 15000, "instanceIdGenerator": "simple", "ipDeleteTimeout": 30000 } ]
这样就实现了自助注册与发现