首先我們在名為MSG的服務中定義一個簡單的方法 我們需要在另一個服務中調用這個服務的方法,除了使用httpclient之外,我們還能用RestTemplate(RestTemplate是Spring提供的用於訪問Rest服務的客戶端) 第一種方式,這種方式只要指定url和返回類型即可調用,但是url ...
首先我們在名為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; }