我有一个用 Lua 编写的客户端服务。它通过 STOMP 订阅 ActiveMQ Classic 5.16.2 上的主题。该服务的逻辑是连接、为给定主题的所有消息创建持久订阅,然后断开连接。当某个主题没有更多消息可用时,客户端会收到一条超时消息,该消息用作发送
DISCONNECT
帧以关闭连接的指示符。在测试过程中,我发现主题消息也可能出现在 DISCONNECT
命令的确认消息中。
以下是客户端订阅主题消息的步骤:
SUBSCRIBE
帧以创建持久订阅。MESSAGE
帧并发生超时。DISCONNECT
帧(索取收据)。MESSAGE
帧,并最终接收 RECEIPT
的 DISCONNECT
帧。问题在于,在第 5 步中客户端有时会收到“无帧”并且发生超时。但是,根据 ActiveMQ 日志,发送了 RECEIPT
帧,有时也发送了
MESSAGE
帧。起初,我以为再次运行上述步骤时会出现这些帧,但从未收到它们。他们只是迷路了。那么解决这个问题的最佳方法是什么? ActiveMQ 中是否有任何配置需要更改?
client
或
client-individual
。您可能使用 auto
,这意味着代理可能会发送(并自动确认)客户端从未收到的消息。这可能在很多不同的情况下发生(例如网络故障、客户端崩溃等)。