我在使用 JMS 时遇到了一个非常奇怪的问题。
我有两台机器A-Windows,B-Linux。 机器 A 初始化 JMS(创建一个生产者和一个消费者)。 (Java 代码)
机器 B 向机器 A 发送消息。 机器A收到!消息并将响应发送回机器 B。 (C++ 代码)
我的问题是:当我运行机器A代码时一切正常!但是当我在另一台 Windows 机器上运行相同的二进制文件时(我们称它为 机器 C),来自 机器 B 的消息被接受但是 机器 C 接受了不发送答案。
我嗅探了网络,发现在 机器 A 的情况下,它发送 TCP-ACK 然后是 TCP PSH-ACK(与正确 react )。但是 机器 C 只发送 TCP-ACK *没有* TCP-PSH-ACK。
编辑: 使用 JConsole 我注意到 machine C 的输出主题属性:DequeueCount、DispatchCount、Enqueue Count 都是零。似乎生产者没有发送/排队任何东西(没有抛出异常)。
感谢任何帮助!
最佳答案
看起来解决方案很明显,我有点尴尬没有注意到它。无论如何,在机器 A 上运行的代码似乎使用了一个非事务 session ,而在机器 C 上运行的代码使用了一个事务 session 没有 COMMITING!!!!.
所以我关闭了 session 的事务标志(无论如何它都符合我的需要),它就像一个魅力!
关于在没有提交 svn 的情况下更改代码的家伙......我稍后会和他谈谈 :)
关于java - 使用 JMS 发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11313538/