使用RestTemplate进行服务调用的几种方式

2019-09-17 10:24:33来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

使用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;
    }

 


原文链接:https://www.cnblogs.com/skychmz/p/11503201.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:分布式Id - redis方式

下一篇:SpringMVC入门