Eureka Client监听启动状态
在Eureka Client 端,通过@PostConstruct
注解去做一些初始化工作,有时会涉及到调用其他微服务,如调用缓存服务以设置初始化配置信息缓存,这个时候,由于Eureka Client尚未启动完成,注册信息还没有从Eureka Server上拉取下来,因此ribbon是获取不到client信息的,在使用Fegin调用的过程中,如果开启了熔断器,那么服务调用会快速失败
feign:
hystrix:
enabled: true
如果需要使用熔断,去除如上配置,那么调用服务需要等到获取到了Eureka Client信息之后才开始调用。
为保证在使用了Hystrix的前提下,能够在系统启动成功之后,可以调用其他微服务做一些初始化工作,可以使用如下方法:
import com.netflix.appinfo.ApplicationInfoManager;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.discovery.EurekaClient;
import com.netflix.discovery.StatusChangeEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
@Slf4j
@Component
public class EurekaClientConfig {
ApplicationInfoManager.StatusChangeListener eurekaListener = null;
@Resource
private AppBlogConfig appblogConfig;
@Resource
private EurekaClient eurekaClient;
@PostConstruct
public void init() {
eurekaListener = new ApplicationInfoManager.StatusChangeListener() {
@Override
public String getId() {
return "channel-front";
}
@Override
public void notify(StatusChangeEvent statusChangeEvent) {
// 当前状态为UP,之前的状态为STARTING
if (InstanceInfo.InstanceStatus.UP == statusChangeEvent.getStatus() && InstanceInfo.InstanceStatus.STARTING == statusChangeEvent.getPreviousStatus()) {
// 执行一遍之后,在卸载该监听,达到在EurekaClient启动完成之后,仅执行一次
// ID可以自定义
appblogConfig.init();
ApplicationInfoManager.getInstance().unregisterStatusChangeListener(eurekaListener.getId());
eurekaListener = null;
}
}
};
eurekaClient.getApplicationInfoManager().registerStatusChangeListener(eurekaListener);
}
}
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/04/01/eureka-client-listening-startup-status/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
THE END
0
二维码
打赏
海报
Eureka Client监听启动状态
在Eureka Client 端,通过@PostConstruct注解去做一些初始化工作,有时会涉及到调用其他微服务,如调用缓存服务以设置初始化配置信息缓存,这个时候,由于Eure……
文章目录
关闭
共有 0 条评论