2016-12-01 1 views
2

Я пытаюсь использовать gb rubywmq для публикации сообщения в пабе/подписях IBM MQ. Я не вижу прямого способа публикации темы из Ruby-кода.Как опубликовать сообщение в IBM WebsphereMQ TOPIC с использованием rubywmq gem

Ниже приводится MQ темы, 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 рубинового Код:

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''') 

Не удалось. Может ли кто-нибудь указать, где проблема, или предложить альтернативу? Благодарю.

Software Version Использована

  • IBM WMQ Сервер & Client v7.5
  • Рубин v2.3.0
  • rubywmq v2.1.1

ответ

1

В QALIAS должен указывать на TOPIC Объект, относящийся к TOPICSTR вы хотите опубликуйте в. Пример:

DEFINE TOPIC(MY_TOPIC_MSG_RAW) TOPICSTR('COM/APP/MSG/RAW') 
DEFINE QALIAS(MY_TOPIC_Q) TARGET(MY_TOPIC_MSG_RAW) TARGTYPE(TOPIC) 
3

Ввод сообщение для псевдонима над темой является метод для преобразования точки к точке приложения для паба/суб. Поскольку вызов API PUT, а не PUBLISH, нет механизма добавления строки темы в префикс, предоставленный объектом темы. Сообщения публикуются в строку темы, как определено в объекте темы, и не далее. Ваша подписка SUB.APP.LOGGER.INPUT должна видеть публикации, но не другие.

В опубликованном коде есть еще несколько проблем. Создание заголовка RFH2 предполагает, что вы полагаетесь на документы от, возможно, уже до версии v5.3 или v6. К сожалению, нет упоминаний о том, в какой версии находится сервер MQ, или какие клиентские библиотеки версий используются Ruby.

Также не упоминается, что вы имели в виду под термином «Не удалось». Означает ли это, что вы видели нулевые публикации, даже на SUB.APP.LOGGER.INPUT Паб появился для сообщений PUT OK? Или PUT вернул код плохой причины? Или что вы получили сообщения на SUB.APP.LOGGER.INPUT, но нигде больше?

В целях отладки вы можете использовать MQ Explorer, образец amqsput или любой другой поставляемый инструмент, чтобы отбросить сообщение в очередь псевдонимов и посмотреть вывод. Разница между этим тестом и вашим тестированием на Ruby должна помочь диагностировать проблему.

Пожалуйста, вернитесь и уточните свой вопрос с дополнительной информацией, если вы хотите получить менее спекулятивный ответ.

+0

Привет, Роб, спасибо за ваш ответ. Я обновил свой вопрос, чтобы показать используемые версии. Я смог проверить, используя MQ Explorer, что полученное сообщение темы отправлено в псевдоним очереди задач. Однако очереди, подписанные на эту тему, не получали сообщений. Консолидированная маршрутизация с использованием PSPROP и SELECTOR не работала. – Ambal

+1

Проблема остается в том, что псевдоним по теме * никогда не приведет к тому, что строка темы будет длиннее, чем в объекте темы. Поскольку единственной возможной темой является «COM/APP», публикация не попадет в очередь подписки, поэтому ничто для селектора не будет действовать. Я предлагаю запустить издатель без абонентского приложения, пока вы не получите сообщения в очередях подписки. –

Смежные вопросы