gpt4 book ai didi

ruby - 如何使用 ruby​​wmq gem 将消息发布到 IBM WebsphereMQ TOPIC

转载 作者:数据小太阳 更新时间:2023-10-29 07:51:52 25 4
gpt4 key购买 nike

我正在尝试使用 ruby​​wmq 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 - 如何使用 ruby​​wmq gem 将消息发布到 IBM WebsphereMQ TOPIC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40916667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com