【问题标题】:Cluster-wide singleton in Websphere ClusterWebsphere 集群中的集群范围的单例
【发布时间】:2013-01-17 19:01:33
【问题描述】:

我需要在 WAS ND 8.0 集群下使用 Apache Camel(或 Spring Integration)运行组件。它们都在启动时运行一些线程,并在正常关闭时停止它们。提供 WAS 管理的线程池没有问题。但是这些线程必须同时在单个集群的节点上运行。此外,它必须是高可用的,即当活动节点下降时切换到其他节点。

我找到的解决方案是 WAS 分区工具。它需要额外的扩展部署许可证。这是唯一的方法,还是有某种方法可以仅使用 Network Deployment 许可证来实现?

提前致谢。

【问题讨论】:

  • 非常好的问题。在负载平衡的 WAS 网络部署设置中运行 Camel 有一些怪癖,在事务处理程序、类加载和托管线程方面,但相当直截了当。在 Network Deployment 设置中拥有一个单一的骆驼实例故障转移是很困难的。您可以使用骆驼路由策略使多个上下文处于活动状态,但仅在单个服务器上启动某些路由。
  • 真的,忘了说:WAS 8.0
  • 您能不能详细说明一下这些组件的作用? (我想弄清楚 JCA 资源适配器是否适合您)
  • 对 Camel 的简短描述在这里:stackoverflow.com/a/10836773/1871980 大致上 Spring Integration 只是另一个实现。他们都需要启动线程,例如定期检查 SFTP 上的新文件等。采用 WAS 调度可以解决这部分的问题,但涉及一些基本的补丁。另一个问题是侦听 JMS 并将消息路由到目录(或再次 SFTP) - 每条消息必须只执行一次,而不是在每个节点上。
  • 对于 JMS,只有一个节点上的一个线程会处理特定的消息

标签: singleton websphere cluster-computing apache-camel spring-integration


【解决方案1】:

我认为没有一个功能可以解决这个有趣的要求。 我可以想象一个“技巧”:

  1. Timer EJB 在队列中发送消息(假设每分钟 1 条)
  2. 配置具有高可用性和无可扩展性的服务集成总线 (SIB),以便 HA 管理器确保只有一个消息传递引擎 (ME) 处于活动状态。
  3. 为高性能和低资源消耗创建一个不可靠的队列。
  4. 应将激活规范配置为仅侦听本地 ME。
  5. MDB 实现以下逻辑:当消息到达时,检查单例线程是否处于活动状态,否则启动线程。

有意义吗?

【讨论】:

    猜你喜欢
    • 2012-09-30
    • 1970-01-01
    • 2016-11-11
    • 2010-11-14
    • 2018-06-17
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 2019-07-11
    相关资源
    最近更新 更多