gpt4 book ai didi

java - 如何协调 JMS 浏览器和消费者?

转载 作者:行者123 更新时间:2023-12-01 09:51:29 25 4
gpt4 key购买 nike

我正在编写一个实用程序来处理重放队列消息。

我的目的是使用 QueueBrowser 逐条消息决定需要做什么。当我遇到不到 15 分钟的消息时,我想停止。这是这样的,例如发生几分钟的数据库超时不会再次发生。如果较旧,我想通过 MessageConsumer 使用消息并将其放置在其所在的原始队列上。

关于做什么还有其他规则。巧妙地做到这一点的唯一方法(即不必重新发布我想留在重放队列上的消息,顺便说一句,该消息会增加 JMSXDeliveryCount 并最终将消息放在队列上的不同位置)是协调浏览器和消费者。

因此我的问题是:这个设计可以吗?即我可以在浏览器正在处理的同一消息上使用消费者吗?或者我必须硬着头皮只使用消费者?

有没有办法消费浏览器刚刚返回的消息?

最佳答案

关于 15 分钟边界:

您可以选择定义消息选择器,这样您就只能看到 JMSTimestamp 消息头字段值大于过去 15 分钟的消息。规范规定此 header 字段的格式必须遵循与 System.currentTimeMillis() 返回的格式相同的格式,因此您所要做的就是进行该调用并减去 15 分钟的等值 (15 * 60 * 1000):

System.currentTimeMillis() - 900000

定义选择器。如果您选择此选项,您将永远不会看到不符合选择器定义的条件的消息,这将缓解您提出的有关消息处理的一些问题。

关于将消息返回到队列:

您可以选择构建消费Session以使用CLIENT_ACKNOWLEDGE消息传递模型。通过这种形式的消息确认,可以从队列中检索消息,但在客户端调用消息的 acknowledge() 方法之前,该消息并不真正被视为已传递。因此,如果您不进行 acknowledge() 调用,该消息仍将在队列中可供其他使用者使用,并且避免了与消息重新发布、传递计数、消息排序等相关的问题。

关于java - 如何协调 JMS 浏览器和消费者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37572556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com