xml - 使用 WMQ Transport 和 Mule ESB 进行批量入队

标签 xml jms mule ibm-mq esb

我的要求是读取一个 csv 并将多条 xml 消息发送到 IBM mq。

从 csv 创建的 xml 将在单个批处理或事务中发送。 原因是系统读取这些消息不是幂等的,以防一些 xml 消息被发送而其余的失败。我需要保留失败的 xml 消息以进行手动重新处理。

如果有人能指出一个可以将多个 xml 消息作为一个批处理排队的功能,那就太好了。

最佳答案

您的要求似乎相互矛盾。

批量发送消息很容易。您将它们全部置于同步点下,然后发出 COMMIT。只要消息的数量不超过队列深度或事务 UOW 限制可以容纳的数量,就可以了。

批量接收它们完全是另一回事。 IBM MQ 具有消息分组和 BIND_ON_OPEN 参数,以确保所有附属消息都到达同一位置并且可以被解释。

到目前为止,这一切都很简单,并且基于基本 MQ API 或 JMS API 中的选项。我看到的更大问题是“读取这些消息的系统不是幂等的”声明,这是一种奇特的说法,它不会检测并优雅地处理欺骗消息。除非使用 XA,否则这是任何异步消息传递传输的问题。它必须优雅地处理重复消息或使用事务协调器来确保没有重复消息。我暂时假设您正在使用两阶段提交,因此满足此要求。

另一个潜在问题来自“我需要保留失败的 xml 消息以进行手动重新处理”。不确定这里的“手动重新处理”是什么意思。 IBM MQ 将保存消息,只需在您将其PUT 放入队列时将其标记为消息。当 QMgr 恢复时,消息将被传递。然而,此声明似乎暗示了高可用性或灾难恢复要求,以便复制消息。

所以简短的回答是在放置消息时选择持久性作为消息属性,并在两阶段提交下这样做。

较长的答案取决于对幂等和恢复的引用实际暗示的内容。如果此处有要求,您需要在问题中添加详细信息。

关于xml - 使用 WMQ Transport 和 Mule ESB 进行批量入队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30579680/

相关文章:

xml - 使用 vbscript 选择SingleNode

MULE 生命周期 - 如何 Hook 到启动过程

http - Mule ESB 中的重新连接策略

PHP SimpleXML - xpath 不起作用,但在在线生成器中它可以

C# 使用 LINQ 读取 XML

java - 为什么不允许我使用 Tibco Rendezvous 确认消息?

transactions - 如何手动从队列中读取 N 条消息,或者如果在 onmessage() 方法中已经过了 Y 时间?

Mule ESB Multiple when Dataweave 中的条件

c# - 如何计算 XML 中具有相同 innertext 值的节点数

java - Solace MQ - 如何检查目的地是否已启动