分布式服务调用ServiceCaller(3)

2016-08-22  本文已影响86人  OneFish

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
上一篇下一篇

猜你喜欢

热点阅读