RestTemplate通信的三种方式
1、直接调用
@RequestMapping("/hello")
public String hello(){
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8081/index/hello";
String response = restTemplate.getForObject(url, String.class);
log.info("response is {}", response);
return "hello world, I'm service-demo";
}
缺点:再多台微服务部署的情况下,一般不知道ip和端口
2、使用LoadBalancerClient构建出ip和端口
@Autowired
private LoadBalancerClient loadBalancerClient;
@RequestMapping("/hello")
public String hello(){
RestTemplate restTemplate = new RestTemplate();
ServiceInstance serviceInstance = loadBalancerClient.choose("service-demo"); //服务名
String url = String.format("http://%s:%s", serviceInstance.getHost(), serviceInstance.getPort());
String response = restTemplate.getForObject(url, String.class);
log.info("response is {}", response);
return "hello world, I'm service-demo";
}
3、使用config配置
@Component
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/hello")
public String hello(){
String url = "http://SERVICE-DEMO/index/hello";
String response = restTemplate.getForObject(url, String.class);
log.info("response is {}", response);
return "hello world, I'm service-demo";
}
Feign通信步骤
1、引用依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>
2、添加Feign注解
@EnableFeignClients
public class ServiceClientApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceClientApplication.class, args);
}
}
3、编写远程通信接口
@FeignClient(name = "service-demo")
public interface ServiceClient {
@GetMapping("/index/hello")
String hello();
}
4、调用方法
@Autowired
private ServiceClient serviceClient;
@RequestMapping("/hello")
public String hello(){
String response = serviceClient.hello();
log.info("response is {}", response);
return "hello world, I'm service-demo";
}