• springcloud 服务注册、反注册 AOP 拦截,实现自定义功能



    @Aspect
    @Component
    @Order(1000)
    public class EurekaServerAspect
    {
    private Logger logger = Logger.getLogger(getClass());

    @Autowired
    IRegisterSevice registerSevice;

    @Pointcut("execution(public * org.springframework.cloud.netflix.eureka.server.EurekaServerAutoConfiguration.peerAwareInstanceRegistry(..))")
    public void instanceAspect(){}

    @Pointcut("execution(public * org.springframework.cloud.netflix.eureka.server.InstanceRegistry.register(..))")
    public void registerAspect(){}

    @Pointcut("execution(public * org.springframework.cloud.netflix.eureka.server.InstanceRegistry.cancel(..))")
    public void cancelAspect(){}

    @Pointcut("execution(public * org.springframework.cloud.netflix.eureka.server.InstanceRegistry.renew(..))")
    public void renewAspect(){}


    @Around("instanceAspect()")
    public Object instance(ProceedingJoinPoint joinPoint) throws Throwable
    {
    logger.info("aspect joinPoint = "+joinPoint);
    //暂时不做修改,待后续扩展
    return joinPoint.proceed();
    }






    @Around("registerAspect()")
    public void register(ProceedingJoinPoint joinPoint) throws Throwable
    {
    logger.info("registerAspect()");
    logger.info("aspect joinPoint = "+joinPoint);
    Object[] args =joinPoint.getArgs();
    if(args!=null&&args.length>0)
    {
    InstanceInfo arg0 = (InstanceInfo) args[0];
    if (registerSevice.containInstanceInfo(arg0.getInstanceId(), arg0.getAppName()))
    {
    return ;
    }
    // 注册新服务实例,保存入数据库
    registerSevice.insertMicroServerInstance((InstanceInfo)arg0);
    }
    //加入自定义的注册的拦截逻辑
    joinPoint.proceed();
    }

    @Around("cancelAspect()")
    public Object cancel(ProceedingJoinPoint joinPoint) throws Throwable
    {
    logger.info("cancelAspect()");
    logger.info("aspect joinPoint = "+joinPoint);
    Object[] args =joinPoint.getArgs();
    if(args!=null&&args.length>0)
    {
    String appName = (String) args[0];
    String serverId = (String) args[1];
    registerSevice.cancelInstanceInfo(serverId, appName);
    }

    //加入自定义的反注册逻辑
    return joinPoint.proceed();
    }

    @Around("renewAspect()")
    public Object renew(ProceedingJoinPoint joinPoint) throws Throwable
    {
    logger.info("renewAspect()");
    logger.info("aspect joinPoint = "+joinPoint);
    //加入自定义的反注册逻辑
    Object[] args =joinPoint.getArgs();
    if(args!=null&&args.length>0)
    {
    String appName = (String) args[0];
    String serverId = (String) args[1];
    registerSevice.updateInstanceInfoHeartbeatTime(serverId, appName, System.currentTimeMillis(), null);;
    }
    return joinPoint.proceed();
    }

    }

  • 相关阅读:
    使用httperrequest,模拟发送及接收Json请求
    VI/VIM 常用命令
    Robot Framework开发系统关键字详细
    Python logging模块使用记录
    反编译app方法
    python+appium使用记录
    查看apk包及Activity名方法
    Robot Framework使用技巧
    git 常用使用及问题记录
    多个git账户生成多份rsa秘钥实现多个账户同时使用配置
  • 原文地址:https://www.cnblogs.com/xiangjune/p/6846237.html
Copyright © 2020-2023  润新知