應用間通訊方式HTTP和RPC
阿新 • • 發佈:2018-12-31
一、HTTP和RPC
1、Dobbo RPC框架
2、Sping Cloud 微服務架構下的一站式解決方案。 微服務直接使用的是 Http restful方式
二、SpringCloud中服務間兩種restful
RestTemplate
Feign
三、RestTemplate
RestTemplate 是一款http客戶端,RestTemplate和httpclient功能差不多,用法上RestTemplate更簡單。
例如訂單服務-> (呼叫) 商品服務
第一種方式:直接使用RestTemplate,url硬編碼
在product產品服務中增加介面 msg
然後在order訂單服務中呼叫
order服務的埠設定為-Dserver.port=8081
測試:
缺點:
1、訪問方式使用IP硬編碼,如果IP換了,就無法訪問了。
2、如果product有多個地址,如http://localhost:8080/msg, http://localhost:9080/msg,這樣就涉及負載均衡,同樣硬編碼IP地址會有問題。
第二種方式:利用LoadBalancerClient ,通過應用名獲得Url,然後在使用restTemplate
@RestController @Slf4j public class ClientController { @Autowired private LoadBalancerClient loadBalancerClient; @GetMapping("/getProductMsg") public String getProductMsg(){ //使用RestTemplate RestTemplate restTemplate = new RestTemplate(); //1.第一種方式 /* String response = restTemplate.getForObject("http://localhost:8080/msg", String.class);*/ //2、第二種方式 ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCT"); String url = String.format("http://%s:%s", serviceInstance.getHost(), serviceInstance.getPort()) + "/msg"; String response = restTemplate.getForObject(url, String.class); log.info("url={},response={}",url,response); return response; } }
第三種方式 (利用@LoadBalanced,可在restTemplate裡使用應用的名字
1、增加RestTemplate的bean,然後增加註解LoadBalanced
@RestController @Slf4j public class ClientController { @Autowired private RestTemplate restTemplate; @GetMapping("/getProductMsg") public String getProductMsg(){ //使用RestTemplate //3.第三種方式 String response = restTemplate.getForObject("http://PRODUCT/msg", String.class); log.info("response={}",response); return response; } }