跟踪JMS消息的来源

时间:2010-11-23 19:01:59

标签: java java-ee jms

javax.jms.Message API中是否有任何方法可以获取有关消息来自何处的信息(来自 onMessage(消息消息))调用?

我正在处理大量新代码,我可以看到消息的来源,但是找到消息来源的堆栈跟踪会非常有用。

我得到的痕迹是:

java.lang.Exception: Stack trace
    at java.lang.Thread.dumpStack(Thread.java:1206)
    at aaa.switch.serverobjects.SVSBean.activateDevice(SVSBean.java:377)
    at aaa.serverobjects.DeviceControlAdapter.activate(DeviceControlAdapter.java:659)
    at aaa.voiceswitch.serverobjects.SVSBean.activate(SVSBean.java:352)
    at aaa.service.DeviceControlServiceJMSMessageListener$1.run(DeviceControlServiceJMSMessageListener.java:237)
    at java.lang.Thread.run(Thread.java:619)

这显然只是回到java.lang.thread,它并没有真正帮助。

2 个答案:

答案 0 :(得分:2)

除非您的JMS实现嵌入在当前的JVM中并且实际上是单线程的。我不知道任何像这样运行的实现,它肯定是非典型的,因为JMS通常用于在应用程序之间传递消息。

由于这是典型情况,因此您的堆栈将仅限于VM中的当前线程。我认为没有办法让堆栈包含来自其他应用程序(即JMS服务器和发送应用程序)的信息。

答案 1 :(得分:2)

我同意这是不可能的,但这就是我要做的。 如果发送消息的代码封装在一个类(例如,类MyJMSSender)中,只需添加特殊的消息属性(例如“stacktrace”)并将值放入

Arrays.asList(new Throwable()。getStackTrace())。replace(“,”,“\ n”)

您可以在接收方打印此属性,并知道消息的来源。