我试图模仿 Spring 的AspectJ @Async 支持,但使用消息总线。
问题是我需要知道我的消息总线(RabbitMQ MessageListener)是调用该方法还是调用该方法将立即返回的普通(所有其他)调用者。
我的注释被称为@MQAsync 而不是 Springs @Async。
package com.snaphop.mqueue;
import org.apache.log4j.Logger;
import com.snaphop.mqueue.MQAsync;
public aspect MQAsyncAspect {
//pointcut asyncTypeMarkedMethod() : execution(@MQAsync void *(..));
pointcut asyncTypeMarkedMethod() : call(@MQAsync void *(..));
private static final Logger log = Logger.getLogger("MQAsync");
Object around() : asyncTypeMarkedMethod() {
if (listenerIsCaller) {
return proceed();
}
//Send the method parameters to the message bus.
//this logic isn't here for brevity.
return null;
}
}
调用切入点将为我提供调用者上下文,但这不起作用,因为我将通过反射使用消息侦听器调用该方法。执行切入点(已注释掉)不会告诉我谁在调用该方法。
有没有办法通过某种堆栈转储分析来确定调用者类?