繁体   English   中英

RabbitMQ持久队列通过STOMP丢失消息

[英]RabbitMQ durable queue losing messages over STOMP

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

在此处输入图片说明

我遇到的问题是,当JavaScript客户端上的网络连接断开一段时间(例如60秒)时,前24秒的消息会丢失。 我查看了部署在tomcat中的应用程序的日志,直到以下日志语句出现为止,丢失的消息似乎一直存在:

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

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

我的问题是,如何确保在网络断开与端点意识到客户端断开连接之间的消息不会丢失? 端点是否应该以某种方式将消息放回队列? 也许有办法使它具有事务性?

提前致谢。

RabbitMQ团队监视此邮件列表,并且仅有时会在StackOverflow上回答问题。


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

我不知道您的JS应用程序和Tomcat如何交互,但是您可能必须在此实现自己的ack流程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM