1. 程式人生 > >應用間通信方式HTTP和RPC

應用間通信方式HTTP和RPC

adb 訪問 tms spin 技術分享 rest app 測試 負載均衡

一、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;
    }
}

  

應用間通信方式HTTP和RPC