通过AOP切面和事件中心拦截服务注册

@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";
  }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值