【问题标题】:duplicate message processing in spring integration application in multiple tomcats多个tomcat中的spring集成应用程序中的重复消息处理
【发布时间】:2015-01-12 04:18:19
【问题描述】:

我有 spring web/集成应用程序。为了在后台运行长时间运行的进程,我使用了 MongoDbMessageStore 支持的队列,并且每秒轮询一次队列。

我尝试从在两个 tomcat 实例上运行的同一应用程序将消息(每个实例 1000 条消息)发送到网关。我验证了服务器 1 处理的消息没有被服务器 2 处理,反之亦然。我看到了存储在 mongo 集合中的文档。它具有 UUID(消息 id)和 _group_complete,但我无法得出结论,如果应用程序在具有单个 momgodb 实例的多个实例上运行,spring 如何避免重复消息处理。

感谢您的帮助。

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    因为MongoDbMessageStore 使用findAndRemove 操作。

    这是分布式环境的预期行为。

    如果你说相反的话会更糟。

    【讨论】:

    • 感谢 Artem 的及时回复。那么,我不应该担心在多个 tomcat 实例中重复处理消息吗?有没有可以分享的 url,描述了 spring 集成中发生的消息处理(确保没有重复的消息处理,无论是使用 jdbc/mongo 还是任何商店)
    • 请阅读我们的手册。但老实说,ACID 原则超出了 SI 范围。这确实是DB的责任。因此,“如果多个进程可以使用相同的数据库记录做某事”的问题是针对他们的。是的,我们应该正确使用 DB,我们尝试在 Framewrok 中做到这一点。正如您在此处看到的,它是findAndRemove,以避免来自不同进程的重复。
    猜你喜欢
    • 2013-03-30
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多