HTTP vs RPC
dubbo 是rpc協定|
SpringCloud 是http調用
SpringCloud中服務間兩種restful調用方式
RestTemplate
Feign
RestTemplate
第一種方式
RestTemplate restTemplate=new RestTemplate();
String str=restTemplate.getForObject("url",String.class);
url是要調用的服務的url(服務名稱+接口名稱)
伺服器叢集是不确定ip 和端口的。是以這種方式就不太好(處理)
第二種方式
@Autowired
private LoadBalancerClient loadBalancerClient
@GetMapping("/test")
test(){
ServiceInstance serviceInstance =loadBalancerClient.choose("ORDER"); //eureka服務注冊名稱
String url=String.format("http://%s:%s",serviceInstance.getHost(),
serviceInstance.getPort())+"接口url";
RestTemplate restTemplate=new RestTemplate();
String str=restTemplate.getForObject("url",String.class);
}
這種方式每次都要擷取服務執行個體也不好。
第三種方式
package com.hx.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();
}
}
@Autowired
private RestTemplate restTemplate
@GetMapping("/test")
test(){
String str=restTemplate.getForObject("http://ORDER/url",String.class);
//ORDER 服務名 url 接口名稱
}