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

RabbitMQ持久队列在STOMP上丢失消息,rabbitmq,stomp,spring-websocket,spring-rabbit,Rabbitmq,Stomp,Spring Websocket,Spring Rabbit,我有一个使用javascript/websockets连接到rabbit mq代理的网页,它由部署在tomcat中的spring应用程序公开。外部应用程序每秒生成1条消息,并在网页上呈现。javascript订阅是持久的 我遇到的问题是,当javascript客户机上的网络连接中断一段时间(比如60秒)时,前24秒的消息就会丢失。我已经查看了部署在tomcat中的应用程序的日志,丢失的消息似乎在下面的日志语句中出现: org.springframework.messaging.simp.sto

我有一个使用javascript/websockets连接到rabbit mq代理的网页,它由部署在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过程