【问题标题】:Spring Integration - Can a message store be persistent to a queue?Spring Integration - 消息存储可以持久化到队列吗?
【发布时间】:2015-10-23 07:54:34
【问题描述】:

问题:如果发生系统故障,如何将消息存储中的消息回滚到队列中?

场景: IBM MQ 队列--> JMS 消息驱动通道适配器--> 聚合器。

在导致 JVM 关闭的系统故障期间。我可以指定一个 MQ 队列作为持久消息存储,而不是使用默认的易失性消息存储吗?这样,如果发生系统故障,消息存储中的消息可以回滚到 MQ 持久队列以进行故障转移处理。

编辑:最后一句澄清。

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    不清楚你的意思……

    可以回滚到原始队列

    ...如果你的意思是自动,那么,不。

    有一个 JDBC 消息存储实现(但您需要 XA 事务)。

    您可能可以创建一个由 JMS 支持的自定义消息存储,但这是对队列的不寻常使用 - 我想您必须使用基于 groupId 的消息选择器,但您可能必须保留一个在内存中镜像(并在系统初始化期间对其进行初始化,同时将消息留在队列中)。

    【讨论】:

    • 为了明确,它不必去原始队列。只要系统出现故障,我就可以将消息保存到一个队列中就可以了。目标是为遗留在消息存储中的消息实现故障转移方案。是否可以将它们回滚到队列中?
    • 再一次,不清楚你的意思。如果您编写队列支持的消息存储,则消息已经在队列中,因此无需回滚。但是,正如我也说过的,将队列用作商店有点不寻常。
    • 好的,这就是我想要做的。拥有一个队列支持的消息存储。所以为此我必须做一个自定义消息存储。您能否指出任何显示自定义消息存储的示例?你说这有点不寻常,请问为什么?队列提供持久性,如果发生故障,另一个进程可以从中断处继续,而无需在数据库中创建任何表。
    • 问题是聚合器需要访问完整的组(因此发布策略可以确定是否该发布)。因此,您需要保留该组的并行内存副本。真正的问题是如何在重新启动后恢复该内存副本;您必须以某种方式浏览队列和/或阅读消息并将它们发送回队列。棘手的东西。
    • 好的,这就是我正在寻找的技术响应。所以对于持久性,这就是为什么消息存储最好使用 jdbc 持久存储。
    猜你喜欢
    • 1970-01-01
    • 2013-11-16
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2012-02-08
    • 2012-09-26
    • 2016-06-14
    相关资源
    最近更新 更多