Nacos中对服务提供者的调用通常可以有两种方式:基于RestTemplate和基于Feign。

本文介绍一下基于RestTemplate形式进行相应的调用。

consumer项目中引入依赖:

<!--alibaba的 Nacos依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--Spring的健康检测依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

上述依赖中如果需要使用自定义的负载均衡器,可进行相依依赖的添加,同时排除默认引入的负载均衡器。这里采用了默认的负载均衡器。

yml文件中配置Nacos Server的地址信息:

spring:
  application:
    name: consumer
  profiles:
    active: dev
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.200.129:8848 # nacos服务地址

management:
  endpoints:
    web:
      exposure:
        include: "*" # 暴露健康检测的接口

通过配置类实例化RestTemplate,并在@Bean的实例化方法上加上@LoadBalanced可以实现发现服务和负载均衡。

    @Bean
    @LoadBalanced //开启负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

controller类中方法内直接使用服务名称调用:

@GetMapping("/rest/{id}")
public User consumerUserById(@PathVariable("id") String id) {
    String url = "http://user-service/user/" + id;
    return restTemplate.getForObject(url, User.class);
}

在Controller中负载均衡器会将Nacos的服务名称解析为对应的实例地址,然后传递给RestTemplate进行调用。这也是@LoadBalanced注解背后起到的作用。



Nacos基于RestTemplate方式的调用插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://choupangxia.com/2021/07/04/nacos-resttemplate/