我正在尝试使用 rubywmq gem 将消息发布到 IBM MQ 发布/订阅主题。我没有看到从 Ruby 代码发布到主题的任何直接方式。
以下是 MQ TOPIC,SUB setup 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 header 的主题的别名队列 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
- ruby v2.3.0
- rubywmq v2.1.1
最佳答案
通过主题向别名发送消息是一种将点对点应用程序转换为发布/订阅的方法。由于 API 调用是 PUT 而不是 PUBLISH,因此没有机制将主题字符串添加到主题对象提供的前缀中。消息发布到主题对象中定义的主题字符串,不再发布。您的 SUB.APP.LOGGER.INPUT
订阅应该可以看到发布,但看不到其他发布。
发布的代码中还有其他几个问题。 RFH2 header 的制作表明您依赖的文档可能早于 v5.3 或 v6。遗憾的是,没有提及 MQ 服务器的版本或 Ruby 使用的客户端库的版本。
也没有提及“无法成功”的含义。这是否意味着您看到零发布,即使在 SUB.APP.LOGGER.INPUT
上似乎 PUT 消息正常?或者 PUT 返回错误的原因代码?或者您在 SUB.APP.LOGGER.INPUT
上收到了消息,但在其他地方没有收到消息?
出于调试目的,您可以使用 MQ Explorer、amqsput
示例或任何其他提供的工具将消息放入别名队列并查找输出。该测试与您的 Ruby 测试之间的区别应该有助于诊断问题。
如果您不希望得到猜测性的回复,请务必返回并使用更多详细信息更新您的问题。
关于ruby - 如何使用 rubywmq gem 将消息发布到 IBM WebsphereMQ TOPIC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40916667/