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