从 IBM MQ 消息中检索原始目的地信息

Retrieve original destination information from IBM MQ message

我是 IBM MQ 的新手,我正在尝试编写一个应用程序来使用来自公共队列的消息,这些消息在被路由到公共队列之前可能最初被发送到别名队列或主题。获取消息后,我希望能够根据消息的特定目的地执行条件逻辑。

在 RabbitMq 中我们有能力获取用于发布消息的原始 RoutingKey。这允许我使用通配符进行订阅,然后根据实际的 RoutingKey 为每条消息做一些特殊的事情。

我目前使用的是 IBM MQ 的普通安装。是否可以在 MQ 重新路由之前确定消息的原始目的地(别名队列或主题)?

MQ 能否在路由期间操纵消息(属性、MQMD 字段等...),以便我可以在检索到自定义值后将其拉出?

如果我不能使用 MQ 的普通版本执行此操作,是否有一个附加工具可以添加到 MQ 以提供此功能(我看过很多关于 IBM Integration Bus(以前称为 Message Broker,但我仍然不能完全理解它的作用或者它是否能满足我的需求。)

我在 .Net 中编程,我玩过 XMS 和可通过 amqmdnet.dll

获得的普通 .Net 客户端工具

不,制作人使用的object名称丢失了。尽管某些 MQMD headers 例如 PutApplNameReplyToQReplyToQMgr 可能有助于推断消息的来源。

我认为 many-to-one queue 端点对于 WMQ 实现来说是一种不好的做法。

MQ 是许多应用程序使用的中间件,如果他们开始集成对每个应用程序逻辑的支持,它会变得非常混乱,这就是为什么 MQ 只管理从发送方到接收方获取消息所需的那么多信息。 总的来说,我认为使用传输层的机制来支持应用程序逻辑不是一个好的做法。通过这样做,您对传输解决方案引入了太深的依赖性。

通信应用程序用于提供其服务的任何信息都应包含在发送方和接收方应用程序的消息中。 MQ 提供传输信息的方法,而不是创建或管理信息的方法。

例如,您可以编写发件人应用程序,使其在消息属性中包含发件人应用程序 ID。 MQ会传递这些属性,并提供通过这些属性获取消息的方式。

对于您进一步的问题,默认情况下 MQ 无法操作传输的消息(除了代码页转换),这就是 Message Broker (IIB) 的用途。 但是Message Broker并没有集成到MQ中,它只是将MQ作为一种传输机制,所以当消息完全由MQ路由时,它无助于确定消息的发起者。 如果消息由 Message Broker 路由,则它可以在发送的消息中包含任何信息。

如果消息已发布到主题并从那里路由到基于订阅的队列,则消息将包含 MQTopicString 消息 属性,它为您提供了它们发布到的主题字符串。

例如,使用浏览示例 amqsbcg 查看队列中第三个参数设置为“1”(amqsbcg 1) 的消息。如果您在消息中有消息属性,它们将被列为...

****消息属性****

MQTopicString : '/A/B/C'