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注解背后起到的作用。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接