zoukankan      html  css  js  c++  java
  • 应用间通信方式HTTP和RPC

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

      

     以上方式负载均衡采用轮训的策略,如果要改变成随机的方式,只需做如下配置

    PRODUCT:
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    

      

  • 相关阅读:
    Li Fei-fei写给她学生的一封信,如何做好研究以及写好PAPER(转载)
    OpenCV学习-——OpenCV永久配置(win7 64位+VS2012+OpenCV 2.4.6)
    Eclipse + Jdk配置Java编程环境
    BeautifulSoup安装与引用
    自动启动服务
    自动行列转置
    java-接口
    java基础-抽象类
    JAVA学习day 05 运算
    JAVA学习day 04 变量
  • 原文地址:https://www.cnblogs.com/linlf03/p/10180005.html
Copyright © 2011-2022 走看看