gpt4 book ai didi

ibm-mq - 在 MQ 8.0.0.3 中通过 AMQP/MQ Light 确保交付

转载 作者:行者123 更新时间:2023-12-01 11:54:11 27 4
gpt4 key购买 nike

我们有一个场景,我们希望 node.js 应用程序使用来自后端系统的消息,该后端系统当前将消息放入 Websphere MQ 队列(通过 SAP PI)。

在 MQ 8.0.0.3 中,有一个 AMQP 支持测试版。 https://www.ibm.com/developerworks/community/blogs/messaging/entry/mq_support_for_mq_light_beta_now_available?lang=en

但是,对于如何确保交付,我找不到确凿的答案。完美的解决方案是让 node.js 应用程序将其订阅注册为持久订阅,但我该怎么做呢?我们会将 SAP PI 使用的队列更改为指向主题的别名队列。在 node.js 中使用 mqlight 客户端,版本 1.0

最佳答案

您可以使用 MQ Light 库在 MQ 应用程序和 Node.js 应用程序之间实现可靠的交付。 MQ Light 支持至少一次消息传递(不是恰好一次),因此您在设计解决方案时必须牢记这一点。它将必须处理接收重复的消息。

听起来您可能已经阅读了 article on how to bridge MQ to MQ Light其中解释了一些 MQ queue-to-topic 选项。

为了应对 SAP 应用程序放置消息时 Node.js 应用程序离线的情况,您可以在发出 MQ Light 订阅调用时创建持久目标。例如:

// Destination and its messages expire 24 hours after Node.js client disconnects
var options = { qos: mqlight.QOS_AT_LEAST_ONCE, autoConfirm: false, ttl: (60 * 60 * 24 * 1000)};

client.subscribe(pattern, share, options, function(err, pattern) {
if (err) {
console.error('Problem with subscribe request: %s', err.message);
process.exit(1);
}

if (pattern) {
if (share) {
console.log('Subscribed to share: %s, pattern: %s', share, pattern);
} else {
console.log('Subscribed to pattern: %s', pattern);
}
}
});

您需要确保您的 SAP 应用程序放置的消息没有过期时间(即它们设置了 MQEI_UNLIMITED)。否则,它们可能会在 Node.js 应用程序有机会使用它之前从目的地过期。

其次请注意我在上面的示例中是如何使用 autoConfirm: false 的。这意味着如果 Node.js 应用程序从其目的地获取消息,则该消息不会从目的地删除,直到您在 MQ Light 应用程序中显式调用 message.confirmDelivery()。这使您可以确保消息在从 MQ 中删除之前已在 Node.js 应用程序中完全处理(您已将其写入文件或数据库,或完成任何您需要对其执行的操作)。

如您所说,MQ 中的 MQ Light 功能仍处于测试阶段,目前不受 IBM 支持。但是,有一个方向声明说它将在未来成为受支持的功能。

关于ibm-mq - 在 MQ 8.0.0.3 中通过 AMQP/MQ Light 确保交付,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32630796/

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