我们从队列中收到数据,然后确认队列,然后继续进行,但队列仍保持安慰,并一次又一次以队列的形式接收此数据,在这种情况下会发生什么,请提供我们过去两天遇到的解决方案。
那么您的消费者应用程序正在确认消息,但您是说它保留在队列中并且您再次收到它? 我能想到的最可能的原因是您的应用程序在 ACK 返回到代理之前退出/终止... ACK 是异步发送的(即,它不是对代理的阻塞调用)。 确保您的应用程序在终止时有一个宽限期,首先 stop() FlowReceiver,再等一会,然后 close() 它,然后 close() 会话。
我见过非常“简单”的应用程序,它们连接、收到一条消息、ACK,然后立即断开连接。 然后循环。 这是构建消息应用程序的糟糕方法,因为来自网络 POV 的 TCP 连接(尤其是使用 TLS)非常昂贵。 正确的消息传递应用程序连接到其队列,并保持持续连接以接收其中的消息。