【发布时间】:2015-08-15 06:39:36
【问题描述】:
我的要求是读取一个 csv 并向 IBM mq 发送多个 xml 消息。
从 csv 创建的 xml 将在单个批次或事务中发送。 原因是系统读取这些消息不是幂等的,以防某些 xml 消息被发送,而其余消息则失败。我需要保留失败的 xml 消息以进行手动重新处理。
如果有人能指出一个可以将多条 xml 消息作为一个批次排队的功能,那就太好了。
【问题讨论】:
我的要求是读取一个 csv 并向 IBM mq 发送多个 xml 消息。
从 csv 创建的 xml 将在单个批次或事务中发送。 原因是系统读取这些消息不是幂等的,以防某些 xml 消息被发送,而其余消息则失败。我需要保留失败的 xml 消息以进行手动重新处理。
如果有人能指出一个可以将多条 xml 消息作为一个批次排队的功能,那就太好了。
【问题讨论】:
您似乎有相互矛盾的要求。
批量发送消息很容易。你把它们都放在同步点下,然后发出COMMIT。只要消息数量不超过队列深度或事务 UOW 限制,就可以。
批量接收它们完全是另一回事。 IBM MQ 具有消息分组和BIND_ON_OPEN 参数,以确保所有附属消息都发送到同一个位置并且可以被计算在内。
到目前为止,这一切都很简单,并且基于基本 MQ API 或 JMS API 中的选项。我看到的更大的问题是“读取这些消息的系统不是幂等的”声明,这是一种奇特的说法,它没有检测和优雅地处理欺骗消息。除非使用 XA,否则任何异步消息传输都会出现这种问题。它必须要么优雅地处理重复消息,要么使用事务协调器来确保没有重复消息。我暂时假设您使用的是两阶段提交,所以这个要求得到了满足。
另一个潜在问题来自“我需要保留失败的 xml 消息以进行手动重新处理”。不确定这里的“手动重新处理”是什么意思。 IBM MQ 将持久化消息,只需将其标记为在队列中PUT 即可。当 QMgr 恢复时,消息将被传递。但是,此声明似乎暗示了高可用性或灾难恢复要求,以便复制消息。
所以简短的回答是在放置消息时选择持久性作为消息属性,并在两阶段提交下这样做。
更长的答案取决于对幂等性和恢复的引用实际上暗示了什么。如果这里有要求,您需要在问题中添加详细信息。
【讨论】: