2016-07-12 1 views
2

MQTTモジュール(mqtt.js)を使用してNodeJSにクライアントを置いて、WebSphere MQのトピックと通信し、キューにリダイレクトする:結果が必要MQTTプロトコルはトピックとのみ通信するので、ソースと宛先の間でトピックを使用します。 IBM WebSphere/MQTT.js:MQHRF2をMQSTR形式に変換する

は、だから我々は持っている: NodeJS(ソース) - >は、WebSphere MQのトピック(中間) - >は、WebSphere MQのキュー(宛先)は

問題があることのキューで受信したメッセージWebsphereMQはMQHRF2形式ですが、私はMQSTRが必要です。

フォーマットを指定するmqtt.js側のプロパティが見つかりませんでした。

私はIBM Websphere MQで強制することができますが、どうしたらいいですか?このような用途のためにチャンネルなどを作成することはできますか?つまり、受信フォーマットをに変換しますか?

ご協力いただきありがとうございます。

構成:

制約:

  • のWebSphere MQはV7.5でなければなりません(私はmqlightを使用するV8にアップグレードすることはできません)
  • BeモジュールMQTT.jsに滞在する

WebSphere MQエクスプローラーを介してトピックに直接パブリッシュすると正しく動作します。しかし、NodeJSアプリケーションから公開すると失敗します。

は、私がコメントで上場両方の方法を試してみましたが、私は奇妙なことを見つけました:MQエクスプローラーで

:結果は、私がMQExplorer(私はいつも使用したもの)、またはMQコンソールを使用する場合に応じて異なります QUEUE_MQTT_VERIF MQTTVerification amqsbcg:コマンドを使用して、MQコンソール、オンMQ Explorer

MQExplorerにそれがMQHRF2であるのに対し MQ Console, with the command : amqsbcg QUEUE_MQTT_VERIF MQTTVerification

あなたが見ることができるようには、コンソールでは、フォーマットフィールドは、空です。メッセージも異なっています。

MQConsoleの結果は正しいですが、MQExplorerは変更後も依然として間違った結果を示しています。その結果、変更が両方で行われている右の場合にのみであることを 注:

  • サブスクリプション:ALTER SUB(APPLE。料金)PSPROP(NONE)
  • キュー:ALTER QLOCAL(価格)PROPCTL(NONE)

たぶん、問題の原因は、MQExplorerソフトウェア上の表示だけでしょうか?

EDIT:MQExplorerとMQConsole差がMQ Explorerのパラメータに起因した

:ウィンドウ - >設定 - >のWebSphereMQエクスプローラ - >メッセージのプロパティ - >チェックを外し "ディスプレイメッセージプロパティ"。

DEFINE QLOCAL(PRICES) 
DEFINE TOPIC(APPLES) TOPICSTR('Price/Fruit/Apples') 
DEFINE SUB(APPLE.PRICES) TOPICOBJ(APPLES) DESTCLAS(PROVIDED) DEST(PRICES) 

キュー価格のトピック文字列「価格/フルーツ/りんご」で作られた出版物をリダイレクトする - :キューに話題に作られた出版物をリダイレクトする場合

答えて

2

あなたはおそらく、このようないくつかの定義があります。

ただし、このような設定では、トピック・ストリングがキュー・マネージャーによってメッセージに追加され、MQRFH2ヘッダーが公開メッセージの先頭に追加されます。

Message Descriptor (MQMD) 
Report  :00000000 
Message Type :8 (Datagram) 
Format  :'MQHRF2 ' 
Priority  :0 
Persistence :0 (Not Persistent) 
Message Id :414D51204D51473120202020202020202D77835720003702 
       'AMQ MQG1  -w.W .7.' 
ReplyToQ  :'            ' 
ReplyToQMgr :'MQG1           ' 
[ 102 bytes] Message Content 
<mqps> 
    <Top> 
    Price/Fruit/Apples 
    </Top> 
</mqps> 
Apples are $2/kilo 

アプリケーションの読み込みをキューから変更することなくこれを削除するには、この変更をサブスクリプションに行います。

ALTER SUB(APPLE.PRICES) PSPROP(NONE) 

これは、トピック・ストリングを最初にメッセージに入れても、キュー・マネージャーを停止させます。

MQRFH2は、SUBがPSPROP(NONE)に変更された後もMQRFH2が存在することがわかります。これは、別のプロパティーが存在するためです(mqtt.clientid)。トピック・ストリングと同様にMQRFH2には他のアイテムがあるので、SUB変更はキュー・マネージャーによって追加されたトピック・ストリングのみを削除しません。その場合、次のことを試してください。

トピック文字列を表示したくない場合や、表示したくないアプリケーションだけを削除する場合は、同様の変更をキューに加えることができます。これは、アプリケーションコードでオーバーライドされる可能性があります。プロパティをアプリケーションに強制的に配信しますが、それ以外の場合は適用されません。これにより、すでに公開されている既存のメッセージを読み取ることもできます(SUBへの変更は、すでにキューに入っているメッセージに回帰的に適用されません)。

ALTER QLOCAL(PRICES) PROPCTL(NONE) 

これは、具体的MQGMO_FORCE_RFH2を要求しないアプリケーションは、MQRFH2せずにメッセージが表示されますことを意味します。 amqsbcgサンプルはそのようなアプリケーションの1つです。

アプリケーションがMQGMO_FORCE_RFH2をコードする場合、MQRFH2ヘッダーのプロパティーを明示的に要求しているため、MQRFH2ヘッダーのプロパティーを引き続き表示できます。キューを変更することで停止することはできません。

問題は、MQ Explorerがメッセージの表示方法を選択したばかりです。 MQエクスプローラーには、「ウィンドウ」 - >「プリファレンス」 - >「WebSphereMQエクスプローラー」 - >「メッセージ・プロパティー」 - >「メッセージ・プロパティーの表示」のチェックマークを外すとMQRFH2になることがあります。

+0

私はあなたが一歩一歩言ったことを正確に行いましたが、それでも動作しません...他に何かをチェックする必要がありますか? また、受信した文字列の内容のみを保持するために、ヘッダーを削除する方法がありますか? –

+0

パブリケーションが外部ソース(ここではnodeJS)から来た場合はどうなりますか? (cf:投稿を編集) –

+0

あなたはどのメソッドを使用しましたか? SUBまたはQUEUEを変更しましたか? SUBを変更した場合は、動作するかどうかをテストするために新しいメッセージを発行しましたか? –

関連する問題