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

本文探讨了Eureka客户端如何使用RetryableEurekaHttpClient实现向Eureka Server集群的注册和重试机制。当ServiceUrl配置多个时,客户端会按照顺序尝试每个服务器,最多重试3次。如果一个请求成功,其余服务器则不再尝试。同时,文章指出配置多个Eureka Server URL以应对部分服务器可能被拉黑的情况,并建议随机配置URL顺序以避免单一服务器过载。通过对getHostCandidates()方法的分析,揭示了客户端的黑名单策略,提高请求成功率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面有几个疑问是我看源码时问自己的,先提出来,希望看这篇文章的人带着疑问去读,然后初步介绍下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方法
    retu
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值