rubywmq gemを使用してIBM MQ pub/subトピックにメッセージを公開しようとしています。私はRubyコードからトピックに公開する直接の方法を見ません。Rubywmq gemを使用してIBM WebsphereMQ TOPICにメッセージを公開するには
MQ TOPIC、SUBセットアップMQSCを以下に示します。
DEFINE TOPIC(MY_TOPIC) TOPICSTR('COM/APP')
DEFINE QALIAS(MY_TOPIC_Q) TARGET(MY_TOPIC) TARGTYPE(TOPIC)
DEFINE QLOCAL(APP.RAW.INPUT)
DEFINE QLOCAL(APP.VALIDATOR.INPUT)
DEFINE QLOCAL(APP.ENRICHER.INPUT)
DEFINE QLOCAL(APP.XFORM.INPUT)
DEFINE QLOCAL(APP.LOGGER.INPUT)
DEFINE SUB(SUB.APP.RAW.INPUT) TOPICOBJ(MY_TOPIC) TOPICSTR('MSG/RAW') DEST(APP.RAW.INPUT)
DEFINE SUB(SUB.APP.VALIDATOR.INPUT) TOPICOBJ(MY_TOPIC) TOPICSTR('MSG/XML') DEST(APP.VALIDATOR.INPUT)
DEFINE SUB(SUB.APP.ENRICHER.INPUT) TOPICOBJ(MY_TOPIC) TOPICSTR('MSG/VLD') DEST(APP.ENRICHER.INPUT)
DEFINE SUB(SUB.APP.XFORM.INPUT) TOPICOBJ(MY_TOPIC) TOPICSTR('MSG/ENR') DEST(APP.XFORM.INPUT)
DEFINE SUB(SUB.APP.LOGGER.INPUT) TOPICOBJ(MY_TOPIC) TOPICSTR('#') DEST(APP.LOGGER.INPUT)
私もMQRFH2ヘッダー Rubyのコードで話題の別名キューに公開しようとした:
WMQ::QueueManager.connect(:connection_name => conn_name, :channel_name => channel_name, :q_mgr_name=> queue_manager) do |qmgr|
message = WMQ::Message.new
message.data = 'Hello World'
message.headers = [
{
header_type: :rf_header_2,
xml: ['<route>COM/APP/MSG/RAW</route>']
}
]
message.descriptor[:format] = WMQ::MQFMT_STRING
qmgr.put(q_name: 'MY_TOPIC_Q', message: message)
end
そしてSUBを追加
DEFINE SUB(SUB.APP.RAW.INPUT) TOPICOBJ(MY_TOPIC) TOPICSTR('MSG/RAW') DEST(APP.RAW.INPUT) PSPROP(RFH2) SELECTOR('route = ''COM/APP/MSG/RAW''')
成功できませんでした。誰かが問題のある箇所を指摘したり、代替案を提案したりすることができますか?ありがとう。
使用されているソフトウェアのバージョン:
- IBM WMQサーバー&クライアントV7.5
- ルビーV2.3.0
- rubywmq 2.1.1
こんにちは、ロブ、ご返信ありがとうございます。使用しているバージョンを表示するように質問を更新しました。私はトピックエクスプローラを使用して、トピックキューエイリアスに送信されたときにそのトピックがメッセージを受信したことを確認できました。ただし、トピックに登録されたキューはメッセージを受信しませんでした。 PSPROPとSELECTORを使用したコンテンツベースルーティングは機能しませんでした。 – Ambal
トピックのエイリアスがトピックオブジェクトのトピック文字列より長いトピック文字列を決して*決して*返さないという問題が残っています。可能なトピックは「COM/APP」だけなので、パブリケーションはサブスクリプションキューに入らず、したがってセレクタが動作することはありません。購読キューにメッセージが届くまで、サブスクライバアプリなしでパブリッシャを実行することをお勧めします。 –