美文网首页
分布式服务调用ServiceCaller(3)

分布式服务调用ServiceCaller(3)

作者: OneFish | 来源:发表于2016-08-22 15:00 被阅读86次

    ServiceCaller 服务调用

    服务调用逻辑

    1. 调用Request,包含调用的服务名称,参数
    2. Hyrstrix会将请求加入到command的请求队列中
    3. 根据serviceName在zk中获取当前全部服务的url
    4. 根据负载均衡策略选取调用的url
    5. 执行http调用,返回结果

    调用详解

    1. 创建HystrixCommand实例
      super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey(serviceName.split("\\.")[0]))
                      .andCommandKey(HystrixCommandKey.Factory.asKey(serviceName))
                      .andCommandPropertiesDefaults(HystrixCommandProperties.Setter().withExecutionTimeoutInMilliseconds(timeOut)));
      
    2. 执行一系列初始化操作
      • 初始化线程池包括线程池队列大小,线程池线程数,线程池队列最大排队数等,按照groupKey进行了线程池隔离,也就说一个groupKey实例化一个线程池
      • 初始化熔断器设置,什么频率内失败了百分之多少将进行熔断处理,以及几分钟之后进行服务重试
      • 其他一些配置可自行研究
      • 这些配置项均是用了archaius的,既可写在配置文件中,随启动时读取配置并初始化,也可项目启动后动态修改(新增,删除,修改),但是注意大部分配置项只在初始化时生效。
    3. 基于rxJava的事务发布与订阅
      • subscribe初始化的command
      • 执行command的run方法
      • 如果执行异常则执行getFallBack()进行降级
      • 熔断器的一些校验
    4. 执行http调用
      • 首先读取zk获取服务地址,以及一些服务的配置(可选)
      • 通过实现的负载均衡策略,获取实际使用的服务地址
      • 执行http调用,返回执行结果Future

    相关文章

      网友评论

          本文标题:分布式服务调用ServiceCaller(3)

          本文链接:https://www.haomeiwen.com/subject/qbqgsttx.html