RabbitMQ持久队列丢失STOMP上的消息

时间:2017-12-01 16:57:16

标签: rabbitmq stomp spring-websocket spring-rabbit spring-rabbitmq

我有一个网页连接到一个兔子mq代理,使用javascript / websockets,由tomcat中部署的spring应用程序公开。消息由外部应用程序每秒生成1个,并在网页上呈现。 javascript订阅是持久的。

enter image description here

我遇到的问题是,当javascript客户端上的网络连接断开一段时间(比如说60秒)时,会丢失前24秒的消息。我已经查看了tomcat中部署的应用程序的日志,并且在以下日志语句之前似乎缺少消息:

org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler - DEBUG - TCP connection to broker closed in session 14

我认为这是端点实现javascript客户端断开连接的点,并决定关闭与代理的连接,导致将来的消息排队。

我的问题是如何确保网络被切断的时间与端点实现客户端断开连接的时间之间的消息不会丢失?端点应该以某种方式将消息放回队列吗?也许有办法让它成为交易?

提前致谢。

1 个答案:

答案 0 :(得分:2)

RabbitMQ团队监控this mailing list,有时只回答StackOverflow上的问题。

您的Tomcat应用程序在确认您的Javascript客户端已收到消息之前不应确认来自RabbitMQ的消息。这样,任何未被JS客户端验证的消息都不会被Tomcat激活,RabbitMQ将重新发送它们。

我不知道你的JS应用程序和Tomcat如何交互,但你可能必须在那里实现自己的ack进程。

相关问题