MQapi是否支持别名修改
Does MQ api support alias modify
我可以使用 Java MQ Api 来放置和获取消息。
我也可以禁用获取并放入队列。
在迁移项目中,我们将并行运行一个应用程序 运行。旧的和新的。旧的和新的将有自己独立的队列。我经常收到来自旧客户的消息。偶尔希望消息流向 New。
想知道 MQ 是否支持 gate/switch 概念。通过 API 我可以在短时间内将队列指向新的或旧的。
试图避免通过 WMB 使用基于消息的路由,因为我今天不必这样做。并行模式只有几个月。
你没有提到MQ的版本或是否有消息亲和性或对保存MQMD.MsgID
的依赖。这些对于设计解决此问题的方法至关重要。我将尝试描述足够多的选项,以便无论您使用什么版本,至少有一个是可行的。
Pub/Sub
最简单的做法是让消息通过一个主题的别名到达。到达的任何消息都会立即发布在该主题上。然后生成管理订阅以将消息定向到需要消息的应用程序正在侦听的队列是一件简单的事情。这完全是配置更改,不需要外部组件、流程或代码。它可从 MQ 的 v7.1 及更高版本获得,也就是说任何当前支持的 MQ 版本。
不利的一面是,IBM MQ 会将 MQMD.MsgID
从主题上收到消息的时间更改为在应用程序的输入队列上发布消息的时间。这会破坏应用程序在回复时使用传入消息的 MQMD.MsgID
作为相关 ID 的能力。如果发出请求的应用预加载关联 ID 或不依赖关联 ID,则这不是问题。
别名
但对于存在此问题的应用程序,它会变得有点困难。您可以为队列设置别名,并让入站消息落在别名上。当您需要从一个队列切换到另一个队列时,您可以更改别名。这有几个问题。首先是永远不可能将消息流传递给多个应用程序。在并行处理测试中,通常需要准确地执行此操作,然后比较摘要或详细报告。
第二个问题本质上更具操作性。别名打开时无法更改。如果消息通过 RCVR
、RQSTR
或 `CLUSRCVR 通道到达,没问题。停止通道,切换别名并重新启动通道。在一系列 MQSC 脚本命令中,这可以比输入更快地完成。但是,如果放置消息的应用程序以绑定模式连接或通过客户端直接连接到别名,则必须全部停止它们才能更改别名。
也就是说,别名适用于开箱即用的所有 MQ 版本。
实体副本
已经存在了一段时间的一种解决方案是使用 Q
程序 (SupportPac MA01) 来定向消息。在这个场景中,消息登陆的队列是一个本地队列。 Q
程序被触发或设置为不断监听队列。当消息到达时,Q
然后将其复制到一个或两个目标队列。
在触发 Q
时切换行为涉及预定义 2 或 3 个进程,其中每个进程定义不同的行为 - 将新消息移动到 QUEUEA
、QUEUEB
或两者.将队列的 PROCESS
属性更改为指向不同的进程会导致行为发生瞬时变化。
或者,如果 Q 配置为永远侦听队列,则更改行为涉及使用三个不同的脚本来执行它,其中一个导致将消息复制到 QUEUEA
,另一个导致复制到 QUEUEB
和另一个到两个队列。更改行为涉及终止脚本并启动一个不同的脚本。
Q
程序适用于所有版本的 MQ,无论它是触发式还是脚本式。
这种方法的缺点包括显而易见的 - 更多移动部件。您必须触发队列或使事务程序像守护进程一样运行。不难,但如果您将业务押在它上面,那么可能需要进行一些监控以确保输入队列不会开始构建。
推荐
在所有这些方法中,我 非常 喜欢 Pub/Sub 版本。它非常可靠,移动部件最少,如果有任何故障,它会得到 IBM 的支持。当您需要更改某些内容时,您可以在对 运行 应用程序产生最小影响的情况下进行更改。如果可能,请使用它。
我可以使用 Java MQ Api 来放置和获取消息。 我也可以禁用获取并放入队列。
在迁移项目中,我们将并行运行一个应用程序 运行。旧的和新的。旧的和新的将有自己独立的队列。我经常收到来自旧客户的消息。偶尔希望消息流向 New。
想知道 MQ 是否支持 gate/switch 概念。通过 API 我可以在短时间内将队列指向新的或旧的。
试图避免通过 WMB 使用基于消息的路由,因为我今天不必这样做。并行模式只有几个月。
你没有提到MQ的版本或是否有消息亲和性或对保存MQMD.MsgID
的依赖。这些对于设计解决此问题的方法至关重要。我将尝试描述足够多的选项,以便无论您使用什么版本,至少有一个是可行的。
Pub/Sub
最简单的做法是让消息通过一个主题的别名到达。到达的任何消息都会立即发布在该主题上。然后生成管理订阅以将消息定向到需要消息的应用程序正在侦听的队列是一件简单的事情。这完全是配置更改,不需要外部组件、流程或代码。它可从 MQ 的 v7.1 及更高版本获得,也就是说任何当前支持的 MQ 版本。
不利的一面是,IBM MQ 会将 MQMD.MsgID
从主题上收到消息的时间更改为在应用程序的输入队列上发布消息的时间。这会破坏应用程序在回复时使用传入消息的 MQMD.MsgID
作为相关 ID 的能力。如果发出请求的应用预加载关联 ID 或不依赖关联 ID,则这不是问题。
别名
但对于存在此问题的应用程序,它会变得有点困难。您可以为队列设置别名,并让入站消息落在别名上。当您需要从一个队列切换到另一个队列时,您可以更改别名。这有几个问题。首先是永远不可能将消息流传递给多个应用程序。在并行处理测试中,通常需要准确地执行此操作,然后比较摘要或详细报告。
第二个问题本质上更具操作性。别名打开时无法更改。如果消息通过 RCVR
、RQSTR
或 `CLUSRCVR 通道到达,没问题。停止通道,切换别名并重新启动通道。在一系列 MQSC 脚本命令中,这可以比输入更快地完成。但是,如果放置消息的应用程序以绑定模式连接或通过客户端直接连接到别名,则必须全部停止它们才能更改别名。
也就是说,别名适用于开箱即用的所有 MQ 版本。
实体副本
已经存在了一段时间的一种解决方案是使用 Q
程序 (SupportPac MA01) 来定向消息。在这个场景中,消息登陆的队列是一个本地队列。 Q
程序被触发或设置为不断监听队列。当消息到达时,Q
然后将其复制到一个或两个目标队列。
在触发 Q
时切换行为涉及预定义 2 或 3 个进程,其中每个进程定义不同的行为 - 将新消息移动到 QUEUEA
、QUEUEB
或两者.将队列的 PROCESS
属性更改为指向不同的进程会导致行为发生瞬时变化。
或者,如果 Q 配置为永远侦听队列,则更改行为涉及使用三个不同的脚本来执行它,其中一个导致将消息复制到 QUEUEA
,另一个导致复制到 QUEUEB
和另一个到两个队列。更改行为涉及终止脚本并启动一个不同的脚本。
Q
程序适用于所有版本的 MQ,无论它是触发式还是脚本式。
这种方法的缺点包括显而易见的 - 更多移动部件。您必须触发队列或使事务程序像守护进程一样运行。不难,但如果您将业务押在它上面,那么可能需要进行一些监控以确保输入队列不会开始构建。
推荐
在所有这些方法中,我 非常 喜欢 Pub/Sub 版本。它非常可靠,移动部件最少,如果有任何故障,它会得到 IBM 的支持。当您需要更改某些内容时,您可以在对 运行 应用程序产生最小影响的情况下进行更改。如果可能,请使用它。