教程仓库:github Spring-Cloud-Alibaba-Learning
教程索引页:index Spring-Cloud-Alibaba-Learning
源码地址
本篇内容的项目地址为:微服务调用
目标
- 可以根据服务名获取到该服务的节点列表
- 可以获取到在服务注册中心注册成功的所有服务名
- 完成跨服务的远程调用
准备工作
保证Nacos在启动状态,且确保两个服务(service-a和service-b)每次启动时都能成功注册到Nacos上
流程
一、根据服务名获取节点列表
我们在service-a中写一个控制器,在里面写一个接口,获取服务名为service-b的节点列表。
-
我们需要使用SpringCloud为我们提供的一个组件DiscoveryClient。
//由SpringCloud提供的组件,和Nacos解耦 //也就是说 如果我们不使用Nacos而是其他的服务发现组件,依然可以使用DiscoveryClient @Autowired private DiscoveryClient discoveryClient;
-
接下来写一个接口来获取服务名为service-b的节点实例
/** * 测试服务发现 * 获取服务名为service-b的所有服务节点实例 * @return serviceInstanceList */ @GetMapping("testInstances") public List<ServiceInstance> getInstances(){ return discoveryClient.getInstances("service-b"); }
接下来做三次测试:
-
启动service-a,不启动service-b,测试接口testInstances,得到返回值如下:
[]
-
启动service-a,启动一个service-b实例,测试接口testInstances,得到返回值如下:
[ { "serviceId": "service-b", "host": "192.168.2.101", "port": 8182, "secure": false,