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();
    }

    }

  • 相关阅读:
    吃喝玩乐AI黑科技
    容器的介绍
    java线程池
    2020牛客暑期多校训练营(第三场)
    zabbix5.0快速搭建
    prometheus中的alertmanage配置文件详解
    gitlab的api操作
    vim编辑器可视模式
    sql语句执行顺序详解
    sql连表查询练习题
  • 原文地址:https://www.cnblogs.com/scode2/p/8664230.html
Copyright © 2011-2022 走看看