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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM