Nacos基于RestTemplate方式的调用
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注解背后起到的作用。

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接