ActiveMQ Classic 的 STOMP 订阅问题

问题描述 投票:0回答:1

我有一个用 Lua 编写的客户端服务。它通过 STOMP 订阅 ActiveMQ Classic 5.16.2 上的主题。该服务的逻辑是连接、为给定主题的所有消息创建持久订阅,然后断开连接。当某个主题没有更多消息可用时,客户端会收到一条超时消息,该消息用作发送

DISCONNECT
帧以关闭连接的指示符。在测试过程中,我发现主题消息也可能出现在
DISCONNECT
命令的确认消息中。

以下是客户端订阅主题消息的步骤:

  1. 创建 TCP 连接。
  2. 发送
    SUBSCRIBE
    帧以创建持久订阅。
  3. 循环接收所有待处理的主题消息,直到不再接收到更多
    MESSAGE
    帧并发生超时。
  4. 发送
    DISCONNECT
    帧(索取收据)。
  5. 接收任何剩余的
    MESSAGE
    帧,并最终接收
    RECEIPT
    DISCONNECT
    帧。

问题在于,在第 5 步中客户端有时会收到“无帧”并且发生超时。但是,根据 ActiveMQ 日志,发送了 RECEIPT 帧,有时也发送了

MESSAGE
帧。起初,我以为再次运行上述步骤时会出现这些帧,但从未收到它们。他们只是迷路了。
那么解决这个问题的最佳方法是什么? ActiveMQ 中是否有任何配置需要更改?

activemq-classic subscription stomp
1个回答
1
投票
client

client-individual
。您可能使用
auto
,这意味着代理可能会发送(并自动确认)客户端从未收到的消息。这可能在很多不同的情况下发生(例如网络故障、客户端崩溃等)。
    

© www.soinside.com 2019 - 2024. All rights reserved.