ActiveMQ-挂起发送方法

ActiveMQ-挂起发送方法,activemq,send,freeze,Activemq,Send,Freeze,我使用的是AcitveMQ 5.3。我不知道我的客户为什么挂起了send(消息生产者的)方法 这是我的情况,, 我有一个服务器(带有MQ代理),我将服务器从1.0升级到了2.0(MQ代理也从5.3升级到了5.6)。 同时,由于MQ代理重新启动,客户端收到“中断”通知和“恢复”通知。在“简历”中,我将我的客户机状态发送到服务器,服务器被挂起 我有10个客户,其中两个有上述情况。我尝试在向代理发送消息时重新启动MQ代理(类似于上面的场景)。但是,很难重现 有人有过这种经历吗?挂起MessagePro

我使用的是AcitveMQ 5.3。我不知道我的客户为什么挂起了send(消息生产者的)方法

这是我的情况,, 我有一个服务器(带有MQ代理),我将服务器从1.0升级到了2.0(MQ代理也从5.3升级到了5.6)。 同时,由于MQ代理重新启动,客户端收到“中断”通知和“恢复”通知。在“简历”中,我将我的客户机状态发送到服务器,服务器被挂起

我有10个客户,其中两个有上述情况。我尝试在向代理发送消息时重新启动MQ代理(类似于上面的场景)。但是,很难重现

有人有过这种经历吗?挂起MessageProducer方法的发送

谢谢


更新: 以下是步骤

  • 代理和客户机版本是5.3

  • 卸载代理并安装5.6代理

    ==>正如您所说,代理和客户之间的版本不匹配。版本不匹配会导致问题吗?但它应该具有向后兼容性,对吗

  • 我将被打断并恢复传输侦听器的方法

  • 我执行一些连接恢复任务,并在恢复调用中向代理发送消息

    ==>正如您所提到的,在恢复通话中发送消息是一种危险的行为。然而,我们一直在这样做,以前从未遇到过这样的问题

  • 我的程序将挂起发送消息

  • 这更清楚吗?代码到处都是分开的,张贴起来并不容易

    谢谢


    更新第2部分

    我将MessageProducer send移动到另一个线程,但我在TransportListener的Resume回调中等待,直到发送完成。在这种情况下,它总是挂起发送消息。但是,“在恢复回调中直接发送消息”偶尔会挂起。这两种情况非常相似。为什么它们如此不同?我深入研究了源代码(ActiveMQ Cpp 3.4.5),但没有发现任何特殊的东西。还是我查错了文件?我真的很想知道它的机理

    顺便说一句,在“更新part2”之前,我使用的是java版本MQ。但是java和cpp之间的结果似乎没有什么不同。因此,在“更新部分2”中,我使用ActiveMQCPP3.4.5作为我的库


    谢谢。

    您的设置有点不清楚,客户端和代理版本是否匹配?如果不是,那么问题很可能与此有关

    一些代码在这里会很有帮助。但是我认为您要说的是,在TransportListener方法resume()调用期间向代理发送一条消息。这可能是危险的,因为您正在从同一个线程循环回传输层,这通常会导致问题,因为这些事件实际上并不意味着您要在其中发送消息等,而是更多地用于更新点,它可以允许您启动一个新线程或活动来处理连接恢复


    挂起MessageProducer send也可以在Producer flow control启动的情况下触发,但我不相信在您的情况下会发生这种情况,但如果不进一步澄清您的问题,则很难确定

    在您的情况下,我的答案是,在生产中,不要错误匹配客户端和代理版本,除非您想玩得不开心。不要发送传输事件回调,除非您不想玩得开心。谢谢您的回复。我还有一个问题,发送MessageListener事件回调(如onMessage)是否也很危险?通常情况下,不会使用故障转移传输的线程或其重新连接任务调用此事件。很抱歉,我发现了另一个问题,并在我的帖子“update part2”中进行了更新。请帮忙回复。谢谢