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();
}
}
springcloud 服务注册、反注册 AOP 拦截,实现自定义功能的更多相关文章
- 【Demo 0025】注册/反注册窗体类RegisterClassEx/UnregisterClass
所有窗体在创建前都必须注册窗体类,只有注册的窗体类才被系统认知并允许实例化,换句话说通过注册告诉进程窗体管理器此类窗体的属性如: 背景色,窗体上的鼠标样式以及窗体事件处理函数等; 有一些控件类系统自 ...
- delphi注册/反注册OCX
uses ShellAPI; function ExecAndWait(const ExecuteFile, ParamString : string): boolean; var SEInfo: T ...
- dll的注册与反注册
regsvr32.exe是32位系统下使用的DLL注册和反注册工具,使用它必须通过命令行的方式使用,格式是:regsvr32 [/i[:cmdline]] DLL文件名命令可以在"开始→运行 ...
- aop 拦截含有特定注解的类
1.功能点:使用aop拦截含有自定义注解的类 1.自定义注解 package com.zhuanche.common.dingdingsync; import java.lang.annotation ...
- SpringCloud服务注册与发现
1.介绍对于微服务的治理而言,其核心就是服务的注册和发现.在SpringCloud 中提供了多种服务注册与发现组件:Eureka,Consul,Zookeeper.官方推荐使用Eureka. 说明:E ...
- SpringCloud服务注册与服务发现之Eureka
Eureka是SpringCloud Netflix的子模块之一,用于云端的服务发现,服务定位,实现云端中间层服务发现和故障转移.服务注册与发现对于微服务系统来说十分的重要,有了服务注册与发现,就省去 ...
- 一、springcloud服务注册、发现、调用(consul/eureka)
1.Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...
- 《springcloud 一》搭建注册中心,服务提供者,服务消费者
注册中心环境搭建 Maven依赖信息 <parent> <groupId>org.springframework.boot</groupId> <artifa ...
- SpringCloud服务的注册发现--------Eureka
1,什么叫做服务的注册与发现 服务的注册与发现基于注册中心,注册中心本身是一个服务,也相当于一个载体,其他服务的注册需要注册到这个注册中心上. 注册:当服务器启动的时候,会将自己的服务器信息,通过别名 ...
随机推荐
- java回调函数学习
前不久学习了代理模式,其中有一个核心之一是Proxy.newProxyInstance();这里有三个参数, loader:目标对象的类加载器 interfaces:目标对象实现的所有接口组成的数组 ...
- Dom对象的研究
1.逻辑运算 || && ! 1||2 5&&4 !0 || 遇到第一个为true 的数字就终止并返回 && 遇到第一个为false ...
- Redis配置解读
- ecstore Fatal error: Class 'base_request' not found
1.首次安装已存在的ecstore报错: Fatal error: Class 'base_request' not found 报错效果图:(ecstore 乱码需要安装zend guard loa ...
- 去除bootstrap默认的input和选中时的样式
input默认样式除border外, 还有一个阴影效果box-shadow:选中时同样有阴影效果. input,input:focus{ border: none !important; box-sh ...
- 04-HTML-图片标签
<html> <head> <title>图片标签学习</title> <meta charset="utf-8"/> ...
- jQuery的一生
jQuery 1.什么是jQuery? 是轻量级的,兼容多浏览器的JavaScript库,使用户能够方便的处理HTML Document,Events,实现动画效果,方便进行Ajax交互,能够极大地简 ...
- 有状态(Stateful)与无状态(Stateless)
1.有状态(Stateful): 有数据存储功能.有状态对象(Stateful Bean),就是有实例变量的对象,可以保存数据,类里面有成员变量,而且成员变量是可变的,是非线程安全的.在不同方法调用间 ...
- webpack+vue+vueRouter模块化构建完整项目实例详细步骤-入门篇
新建项目 开始(确认已经安装node环境和npm包管理工具) 1.新建项目文件名为start_vuedemo 2.npm init -y 初始化项目,我的win7系统,工程在d盘的vue_test_p ...
- python os模块常用方法总结
该模块提供一种便捷的方式来操作系统 os.environ:返回系统环境变量 os.getenv(env):返回环境变量env的值 os.getpid():当前程序的进程 os.uname():返回一个 ...