From 210f1944634e626cb06943ba0e8995d3ff78e371 Mon Sep 17 00:00:00 2001 From: cabbage <281119120@qq.com> Date: Mon, 28 Apr 2025 17:42:50 +0800 Subject: [PATCH] =?UTF-8?q?##=20=E6=B7=BB=E5=8A=A0=E5=BE=AE=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=B3=A8=E5=86=8C=E6=88=90=E5=8A=9F=E5=88=B7=E6=96=B0?= =?UTF-8?q?nacos=E7=BC=93=E5=AD=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NacosInstancesChangeEventListener.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 bd-business/bd-business-scm/src/main/java/com/hzs/listener/NacosInstancesChangeEventListener.java diff --git a/bd-business/bd-business-scm/src/main/java/com/hzs/listener/NacosInstancesChangeEventListener.java b/bd-business/bd-business-scm/src/main/java/com/hzs/listener/NacosInstancesChangeEventListener.java new file mode 100644 index 00000000..6b33069f --- /dev/null +++ b/bd-business/bd-business-scm/src/main/java/com/hzs/listener/NacosInstancesChangeEventListener.java @@ -0,0 +1,43 @@ +package com.hzs.listener; + +import com.alibaba.nacos.client.naming.event.InstancesChangeEvent; +import com.alibaba.nacos.common.notify.NotifyCenter; +import com.alibaba.nacos.common.notify.listener.Subscriber; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; +import org.springframework.cloud.loadbalancer.core.CachingServiceInstanceListSupplier; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; + +@Component +@Slf4j +public class NacosInstancesChangeEventListener extends Subscriber { + + @Resource + private CacheManager defaultLoadBalancerCacheManager; + + @PostConstruct + public void registerToNotifyCenter(){ + NotifyCenter.registerSubscriber(this); + } + + @Override + public void onEvent(InstancesChangeEvent event) { + log.info("scm 接收微服务刷新事件:{}, 开始刷新本地存储的微服务缓存", event.getServiceName()); + Cache cache = defaultLoadBalancerCacheManager.getCache(CachingServiceInstanceListSupplier.SERVICE_INSTANCE_CACHE_NAME); + if (cache != null) { + cache.evict(event.getServiceName()); + log.info("{} 微服务刷新", event.getServiceName()); + } + log.info("scm 微服务缓存刷新完成"); + } + + @Override + public Class subscribeType() { + return InstancesChangeEvent.class; + } + +}