RestTemplateを使用したサービス呼び出しのいくつかの方法

3525 ワード

まずMSGというサービスで簡単な方法を定義します
@RestController
public class ServerController {

    @GetMapping("/msg")
    public String msg() {
        return "this is a msg";
    }
}

httpclientのほかにRestTemplate(RestTemplateはSpringが提供するRestサービスにアクセスするためのクライアント)を使用するには、別のサービスでこのサービスを呼び出す方法が必要です.
1つ目の方法は、urlと戻りタイプを指定するだけで呼び出すことができますが、urlは書き込みが死んでいて、非常に不便です.
@GetMapping("/getMsg")
    public String getMsg(){
        RestTemplate restTemplate=new RestTemplate();
        String response=restTemplate.getForObject("http://localhost:8080/msg",String.class);
        return response;
    }

私たちのサービスに複数のURLがある場合、第1の方法は間違いなくだめなので、第2の方法は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;
    }

3つ目の方法は、まず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