@Aspect
public class DubboServiceRegistrartionEventPublishingAspect implements ApplicationEventPublisherAware{
//定义切面,拦截Spring cloud的ServiceRegistry接口的注册方法
public static final String REGISTER_POINTCUT_EXPRESSION = "execution(* org.springframework.cloud.client.serviceregistry.ServiceRegistry.register(*))&&target(registry)&&args(registration)";
//事件中心对应的发布者
private ApplicationEventPublisher applicationEventPublisher;
//切面拦截之后,发布服务注册预注册事件
@Before(value=REGISTER_POINTCUT_EXPRESSION,argNames="registry,registration")
public void beforeRegister(ServiceRegistry registry,Registration registration){
//实例对象添加到事件当中
applicationEventPublisher.publishEvent(new ServiceInstancePreRegisteredEvent(registry,registration));
}
}
//监听事件
@EventListener(ServiceInstancePreRegisteredEvent.class)
public void onServiceInstancePreRegistered(ServiceInstancePreRegisteredEvent event){
Registration registration = event.getSource();
if(!DubboBootstrap.getInstance().isReady()||!DubboBootstrap.getInstance().isStarted()){
ServiceRegistry<> registry = event.getRegistry();
synchronized(registry){
registrations.putIfAbsent(registry,new HashSet<>());
registrations.get(registry).add(registration);
}
}else{
attachDubboMetadataServiceMetadata(registration);
}
}
//使用注解DubboService将服务接口注册到Nacos注册中心中
@DubboService()
public class XXService implements xxxServiceImpl{
@Override
public String getXXX(){
...
...
return "asdf";
}
}
通过AOP切面和事件中心拦截服务注册
最新推荐文章于 2023-07-18 10:50:02 发布