根据到期时间(生存时间)将消息从一个 IBM MQ 队列移动到另一个 MQ 队列

Move messages from one IBM MQ Queue to a different MQ Queue based on the expiry(time to live)

提问人:Siva Ram 提问时间:12/18/2019 更新时间:12/19/2019 访问量:981

问:

我有一个应用程序,其中我以伪同步方式使用 IBM MQ。我有请求 Q 和响应 Q。这将通过服务调用。现在,我的服务有一个超时期来显示响应。 但是实际响应也可以在超时后推送到响应 Q。现在我想将所有延迟消息(超时)移动到单独的消息 Q 中,以便它们可以被不同的进程使用。

这是通过按时间设置生活可能实现的吗?IBM MQ 中是否有任何可用于此类移动的方法。 有关场景,请参阅下图。

enter image description here

JMS IBM-MQ 同步

评论


答:

0赞 Roger 12/19/2019 #1

不要使用时间生存,因为消息将过期并被删除 - 除非这是您想要的。从您的描述/图片来看,听起来您希望另一个应用程序处理延迟的响应。

MQ 中没有任何东西可以将早于“x”秒/分钟的消息移动到另一个队列。为此,您需要编写一个程序。如果您编写程序,请确保在工作单元下进行移动。

有几个商业程序可以做到这一点:(1) GUI 程序:MQ Visual Edit 和 (2) 命令行(shell):MQ Batch Toolkit

评论

2赞 Morag Hughson 12/19/2019
好吧,dmpmqmsg 也会这样做,这是 MQ 附带的。
0赞 Siva Ram 12/19/2019
@Roger程序的问题是,如果我在队列中使用新的侦听器,则无法区分实时消息和旧消息,因此我的实时消息也有可能被新侦听器拾取,这可能会为我的原始侦听器创建更多超时
0赞 Roger 12/20/2019
@SivaRam浏览(非破坏性)和破坏性获取之间是有区别的。如果您正确地编写了代码,那么这不是问题。我列出的 2 个程序不会干扰。他们浏览队列,如果一条消息早于“x”秒/分钟,那么破坏性地移动并将其放在另一个队列中的工作单元下。