我的要求是读取一个 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/