2016-05-12 18 views
1

私はIBM MQの新機能で、エイリアスキューまたはトピックに送信された可能性のある共通キューからのメッセージを消費するアプリケーションを作成しようとしています。共通キュー。メッセージを取得した後、私はメッセージの特定の宛先に基づいて条件付きロジックを実行できるようにしたいと考えています。IBM MQメッセージから元の宛先情報を取得する

RabbitMqでは、メッセージを公開するために使用された元のRoutingKeyを取得できます。これにより、ワイルドカードを使用して購読することができますが、実際のRoutingKeyに基づいてメッセージごとに特別な処理を行います。

私は現在、IBM MQのプレーン・インストールを使用しています。 MQがメッセージを再ルーティングする前に、メッセージの元の宛先(エイリアスキューまたはトピック)を判断することは可能ですか?

MQはルーティング中にメッセージ(プロパティ、MQMDフィールドなど)を操作できるため、取得したカスタム値を引き出すことができますか?

プレーン版のMQでこれを行うことができない場合は、この機能に対応できる追加のツールをMQに追加することができます(以前はMessage BrokerのIBM Integration Bus

私は.NETでプログラミングしていますが、私はXMSとプレーンな.Netクライアントツールをamqmdnetで利用できました。 dll

答えて

5

メッセージがトピックに公開されていて、サブスクリプションに基づいてメッセージがキューにルーティングされた場合、メッセージにはMQTopicStringメッセージプロパティが含まれます。このプロパティは、トピックの文字列を公開します。

例として、ブラウズサンプルamqsbcgを使用して、3番目の引数が '1'(amqsbcg 1)に設定されたキューのメッセージを表示します。私が考えている '/ A/B/C'

+0

これは正しい方向に私を得ました!プロパティ名が「MQTopicString」ではなく「mqps.Top」であることが判明しましたが、メッセージを公開するために使用された元のトピック文字列を保持していました。エイリアスキューを使用してトピックに転送するときに、このプロパティが設定されていることも確認しました。 – bdway

0

いいえ、プロデューサで使用されたオブジェクト名は失われます。 PutApplName,ReplyToQまたはReplyToQMgrのような一部のMQMDヘッダーがメッセージの発信元を推測するのに役立つかもしれませんが。

多対1のキューエンドポイントを持つことは、WMQ実装の悪い習慣であると私の意見です。

+0

:あなたがメッセージでメッセージのプロパティを持っている場合、それらは

****メッセージのプロパティは****

MQTopicString ...と表示されます可能な値のリストはかなり長くなる可能性があります。なぜ多対1が悪い習慣になるのか不思議です。私にとっては、すべてのパブリッシャが自分のキューに送信し、それらの別々のキューすべてから読み取ろうとすると、管理上の悪夢のように思えます。別のパブリッシャを追加するたびに、そのキューを消費するために追加のプロセスを追加する必要があります。 – bdway

+0

誰が何を送ったのか把握しようとするまで、これはすべて問題ありません。あなたが聞いたことを達成するための完璧な方法があれば、複数のエンドポイントを作成することに問題はありません。 – Stavr00

1

MQは多くのアプリケーションで使用されているミドルウェアです。すべてのアプリケーションロジックのサポートを統合し始めたのであれば、本当に乱雑になります。そのため、MQは送信者から受信者にメッセージを送信するために必要な情報だけを管理します。 一般に、トランスポート層のメカニズムを使用してアプリケーションロジックをサポートするのは良い方法ではないと思います。そうすることで、トランスポートソリューションに深い依存関係が導入されます。

通信アプリケーションがサービスを提供するために使用する情報は、送信者および受信者のアプリケーションによってメッセージに含める必要があります。 MQは、情報を作成または管理するのではなく、情報を転送する手段を提供します。

たとえば、送信者アプリケーションIDをメッセージプロパティに含めるように、送信者アプリケーションを記述することができます。 MQはこれらのプロパティを転送し、これらのプロパティによってメッセージを取得する手段を提供します。

さらに、Message Broker(IIB)のために、デフォルトでMQは転送されたメッセージ(コードページ変換以外)を操作できません。 Message BrokerはMQには統合されていませんが、MQはトランスポート・メカニズムとしてのみ使用されるため、MQによってメッセージが完全にルーティングされたときにメッセージの発信元を判断するのに役立ちません。 メッセージがメッセージブローカーによってルーティングされる場合は、送信されたメッセージに任意の情報を含めることができます。

関連する問題