使用RestTemplate进行服务调用的几种方式
首先我们在名为MSG的服务中定义一个简单的方法
@RestController public class ServerController { @GetMapping("/msg") public String msg() { return "this is a msg"; } }
我们需要在另一个服务中调用这个服务的方法,除了使用httpclient之外,我们还能用RestTemplate(RestTemplate是Spring提供的用于访问Rest服务的客户端)
第一种方式,这种方式只要指定url和返回类型即可调用,但是url是写死的,非常不方便。
@GetMapping("/getMsg")
public String getMsg(){
RestTemplate restTemplate=new RestTemplate();
String response=restTemplate.getForObject("http://localhost:8080/msg",String.class);
return response;
}
当我们的服务有多个URL的时候,第一种方式肯定是不行的,
所以第二种方式是使用Spring Cloud提供的LoadBalancerClient
@GetMapping("/getMsg") public String getMsg(){ RestTemplate restTemplate=new RestTemplate(); ServiceInstance serviceInstance=loadBalancerClient.choose("MSG"); String url=String.format("http://%s:%s",serviceInstance.getHost(),serviceInstance.getPort()); String response=restTemplate.getForObject(url,String.class); return response; }
第三种方法我们可以使用注解的方式,先把RestTemplate配置成bean,@LoadBalanced是开启负载均衡的注解
@Component public class RestTemplateConfig { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } }
然后把这个RestTemplate注入进来调用
@Autowired private RestTemplate restTemplate; @GetMapping("/getMsg") public String getMsg(){ String response=restTemplate.getForObject("http://MSG/msg",String.class); return response; }