zoukankan      html  css  js  c++  java
  • 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();
    }

    }

  • 相关阅读:
    laravel5.* 生成key
    Laravel 调试利器 Laravel Debugbar 扩展包安装及使用教程
    JS相关
    Git常用命令(全)
    linux添加计划任务
    30个php操作redis常用方法代码例子(转载)
    获取服务器IP和客户端IP
    PHP-redis中文文档(相关)
    常用算法排序
    软件下载(汇总)
  • 原文地址:https://www.cnblogs.com/scode2/p/8664230.html
Copyright © 2011-2022 走看看