Eureka高可用之Client重试机制:RetryableEurekaHttpClient

下面有几个疑问是我看源码时问自己的,先提出来,希望看这篇文章的人带着疑问去读,然后初步介绍下EurekaHttpClient体系,后面会详细讲RetryableEurekaHttpClient

1、Eureka Client如何向Eureka Server集群注册?如果我的Client端的ServiceUrl配置了多个Eureka Service地址,那么Client是否会向每一个Server发起注册?

2、Eureka Server具有复制行为,即向其他Eureka Server节点复制自身的实例信息,那么既然有复制行为,那么Eureka Client的ServiceUrl中只配置一个不就行了吗,我注册到Server上,Server自己去把我的信息复制为其他Eureka Server节点不就好了吗,是否就说明Eureka Client的ServiceUrl只配置一个就好?

3、如果Eureka Client的ServiceUrl配置了多个,那么Client会和那个Eureka Server保持通信(注册、续约心跳等)?是否是第一个,或者是随机的?

defaultZone: http://server3:50220/eureka,http://server1:50100/eureka,http://server2:50300/eureka

RetryableEurekaHttpClient继承自EurekaHttpClient装饰器EurekaHttpClientDecorator,它并不是真正发起http请求的HttpClient,它会间接的把请求委托给AbstractJerseyEurekaHttpClient,如下类图:

EurekaHttpClientDecorator这个类采用了模板方法模式,在register、cancel、sendHeartBeat等行为中,抽象出了execute方法,让子类自定义执行行为

//匿名接口,没有具体实现类
public interface RequestExecutor<R> {
    EurekaHttpResponse<R> execute(EurekaHttpClient delegate);
    RequestType getRequestType();
}

//采用模板方法设计模式,从register、cancel、sendHeartBeat等行为中抽象出execute行为,让子类自己去定义具体实现
protected abstract <R> EurekaHttpResponse<R> execute(RequestExecutor<R> requestExecutor);

下面只列出register方法

@Override
public EurekaHttpResponse<Void> register(final InstanceInfo info) {
    //匿名接口的实现,调用子类的execute方法
    return execute(new RequestExecu
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值