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

yyhrrdl8  于 12个月前  发布在  RabbitMQ
关注(0)|答案(1)|浏览(129)

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

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

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

我认为这是端点意识到JavaScript客户端断开连接并决定关闭与代理的连接导致未来消息中断的点。
我的问题是,如何确保从网络断开到端点意识到客户端断开连接之间的消息不会丢失?端点是否应该以某种方式将消息放回队列?或许有办法让它变成交易?
先谢了。

lyr7nygr

lyr7nygr1#

您的Tomcat应用程序不应该确认来自RabbitMQ的消息,直到它确认您的JavaScript客户端已经收到它们。这样,任何没有被JS客户端确认的消息都不会被Tomcat确认,RabbitMQ将重新传递它们。
我不知道你的JS应用程序和Tomcat是如何交互的,但你可能必须在那里实现自己的ack进程。

相关问题