nacos 的部署参照
# nacos 作为服务发现
需要引入的依赖为
com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery需要在启动类上添加
@EnableDiscoveryclient配置 nacos 地址: spring.cloud.nacos.discovery.server-addr=192.168.1.6:8848
如果存在多 IP 的情况,可以使用这个配置选择合适的网卡
spring.cloud.nacos.discovery.network-interface: en1
此时,所有的 restful 服务均注册到 nacos 上.
# 使用 RestTemplate 请求服务
restTemplate.getForObject('http://nacos-provider/echo/' + name, String.class);
此处的 restTemplate 必须为注入的对象,会将 nacos-provider 作为 serverId 进行解析
# 使用 LoadBalancerClient 请求服务
使用LoadBalancerClient根据nacos-provider获取所要请求的服务地址,拼接 url 的方式进行访问
RestTemplate restTemplate = new RestTemplate();
ServiceInstance serviceInstance = loadBalancerClient.choose('nacos-provider');
URI uri = serviceInstance.getUri();
log.info('uri = {}, port = {}, path = {}, uri = {}, requestUri = {} ', uri.getHost(), uri.getPort(),
uri.getPath(),
uri.toString(),
uri + '/echo/' + name);
restTemplate.getForObject(uri + '/echo/' + name, String.class);
url 路径一定要解析完整,而且 restTemplate 必须为 new 出来的对象, loadBalancerClient则为注入的对象
# 获取元数据
RestTemplate restTemplate = new RestTemplate();
ServiceInstance serviceInstance = loadBalancerClient.choose('nacos-provider');
RibbonLoadBalancerClient.RibbonServer ribbonServer = (RibbonLoadBalancerClient.RibbonServer) serviceInstance;
Server server = ribbonServer.getServer();
NacosServer nacosServer = (NacosServer) server;
log.info('Metadata = {},MetaInfo = {}',nacosServer.getMetadata(),nacosServer.getMetaInfo().getAppName());
URI uri = ribbonServer.getUri();
log.info('uri = {}', uri.toString());
restTemplate.getForObject(serviceInstance.getUri() + '/echo/' + name, String.class);
通过loadBalancerClient获取nacosServer,进而获取元数据信息.
# feign
# webflux
参考 learn-alibaba 项目