Websphere 集群中的集群范围的单例

Posted

技术标签:

【中文标题】Websphere 集群中的集群范围的单例【英文标题】:Cluster-wide singleton in Websphere Cluster 【发布时间】: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 的简短描述在这里:***.com/a/10836773/1871980 大致上 Spring Integration 只是另一个实现。他们都需要启动线程,例如定期检查 SFTP 上的新文件等。采用 WAS 调度可以解决这部分的问题,但涉及一些基本的补丁。另一个问题是侦听 JMS 并将消息路由到目录(或再次 SFTP) - 每条消息必须只执行一次,而不是在每个节点上。 对于 JMS,只有一个节点上的一个线程会处理特定的消息 【参考方案1】:

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

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

有意义吗?

【讨论】:

以上是关于Websphere 集群中的集群范围的单例的主要内容,如果未能解决你的问题,请参考以下文章

websphere上集群部署,war包是如何发布的?

SignalR集群采用Nginx进行负载均衡后连接失败

在Spring上下文中的原型bean中的单例bean

websphere 集群 startNode.sh 启动失败 急!!!

Unity 中的单例每个调用上下文(Web 请求)

有关于websphere6.0集群配置,两台单节点,一台IHS节点,一台DM管理节点,如何进行集群配置以及发布企业应