nacos 的部署参照

nacos-deployment

# nacos 作为服务发现

  1. 需要引入的依赖为 com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery

  2. 需要在启动类上添加 @EnableDiscoveryclient

  3. 配置 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 项目