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
分享
二维码
打赏
海报
Eureka Client监听启动状态
在Eureka Client 端,通过@PostConstruct注解去做一些初始化工作,有时会涉及到调用其他微服务,如调用缓存服务以设置初始化配置信息缓存,这个时候,由于Eure……
<<上一篇
下一篇>>
文章目录
关闭
目 录