第一种方法
直接使用restTemplate, url写死
package com.imooc.order.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController @Slf4j public class ClientController { @GetMapping("/getProductMsg") public String GetProductMsg(){ //1.第一种方式 RestTemplate restTemplate = new RestTemplate(); String response = restTemplate.getForObject("http://localhost:8080/msg", String.class); System.out.println("response={}" + response); return response; } }
缺点URL写死,线上部署很不可以
第二种方法,对方有多个地址
通过loadBalancerClient通过应用名获取url,(IP+port)然后再使用RestTemplate
@RestController @Slf4j public class ClientController { @Autowired private LoadBalancerClient loadBalancerClient; @GetMapping("/getProductMsg") public String GetProductMsg(){ //1.第二种方式 RestTemplate restTemplate = new RestTemplate(); ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCT"); String url = String.format("htttp://%s:%s", serviceInstance.getHost(),serviceInstance.getPort())+"/msg"; String response = restTemplate.getForObject(url, String.class); System.out.println("response={}" + response); return response; } }
缺点:每次格式化都挺累
第三种
配置文件config/RestTemplateConfig.java
package com.imooc.order.config; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; @Component public class RestTemplateConfig { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } }
之后在 clientController.java中
@RestController @Slf4j public class ClientController { @Autowired private RestTemplate restTemplate; @GetMapping("/getProductMsg") public String GetProductMsg(){ //1.第三种方式 String response = restTemplate.getForObject("http://PRODUCT/msg", String.class); System.out.println("response={}" + response); return response; } }