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,它并没有真正帮助。
答案 0 :(得分:2)
除非您的JMS实现嵌入在当前的JVM中并且实际上是单线程的。我不知道任何像这样运行的实现,它肯定是非典型的,因为JMS通常用于在应用程序之间传递消息。
由于这是典型情况,因此您的堆栈将仅限于VM中的当前线程。我认为没有办法让堆栈包含来自其他应用程序(即JMS服务器和发送应用程序)的信息。
答案 1 :(得分:2)
我同意这是不可能的,但这就是我要做的。 如果发送消息的代码封装在一个类(例如,类MyJMSSender)中,只需添加特殊的消息属性(例如“stacktrace”)并将值放入
Arrays.asList(new Throwable()。getStackTrace())。replace(“,”,“\ n”)
您可以在接收方打印此属性,并知道消息的来源。