【问题标题】:Use Spring Integration Aggregator in Clustered Environment pointing to same MessageStore在指向同一个 MessageStore 的集群环境中使用 Spring Integration Aggregator
【发布时间】:2018-01-24 19:43:00
【问题描述】:

我们有 Spring Integration Aggregator 组件在多个实例中运行,但都指向同一个 JDBCMessageStore (oracle)。我知道我们可以根据主机名设置区域,以便聚合器聚合与特定主机相关的消息。

但是有什么方法可以在所有实例中使用 DEFAULT 区域,并且仍然只有一个实例聚合消息存储中的所有消息?

我正在阅读“Redis 锁注册表”、“Gemfire 锁注册表”和“Zookeeper 锁注册表”。他们是否需要创建/配置其相关的 MessageStore?或者我可以将它们与现有的 JDBCMessageStore(oracle) 一起使用吗?

使用上述锁注册机制有什么缺点吗?

【问题讨论】:

    标签: redis spring-integration


    【解决方案1】:

    谢谢加里。这些不同的 LockRegistry 有什么用途? https://docs.spring.io/spring-integration/docs/4.2.3.RELEASE/reference/html/messaging-routing-chapter.html#aggregator

    (20) 对 org.springframework.integration.util.LockRegistry bean 的引用;用于根据groupId获取Lock,用于MessageGroup的并发操作。默认情况下,使用内部 DefaultLockRegistry。使用分布式 LockRegistry,例如 ZookeeperLockRegistry,确保只有一个聚合器实例将同时对组进行操作。有关详细信息,请参阅第 24.11 节“Redis 锁注册表”、第 16.6 节“Gemfire 锁注册表”、第 37.3 节“Zookeeper 锁注册表”。

    【讨论】:

    • 不要问其他答案的问题 - 我没有收到通知,这完全是错误的。请改用 cmets。 LockRegistry 在聚合器内部使用,以防止对同一组进行多次更新。如果要跨多个实例使用同一区域,则必须使用共享锁注册表。但是,在这种情况下,任何实例都可以添加和/或释放组。您可以使用单个区域,但前提是您可以确定每个 groupid(相关性)只能由一个实例使用。在这种情况下,您不需要共享锁注册表。
    • 对不起。感谢您对此 Gary 的意见。
    【解决方案2】:

    他们不会帮忙;您需要使用不同的区域。如果跨实例使用同一区域,则必须使用共享锁注册表,但在这种情况下,任何实例都可以添加和/或释放一组消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多