Cluster-wide singleton in Websphere Cluster
我需要在was nd 8.0集群下运行使用apache camel(或Spring集成)的组件。它们都在启动时运行一些线程,并在正常关闭时停止它们。没有问题,供应管理线程池。但这些线程必须同时在单个集群的节点上运行。此外,它必须是高可用性的,即在活动节点下降时切换到其他节点。
我发现的解决方案是分区设施。它需要额外的扩展部署许可证。这是唯一的方法,还是有某种方法可以只使用网络部署许可证来实现这一点?
事先谢谢。
- 很好的问题。在负载平衡的WAS网络中运行camel部署安装程序在事务处理程序、类加载和托管线程方面有一些奇怪之处,但相当直接。在网络部署设置中,单个camel实例故障转移是很困难的。可以使用camel路由策略使多个上下文处于活动状态,但只在单个服务器上启动某些路由。
- 是哪个版本的?
- 真的,忘了提:是8点0分
- 你不能详细说明一下这些部件的作用吗?(我正在尝试找出JCA资源适配器是否适合您)
- 这里是对camel的几句伟大的描述:stackoverflow.com/a/10836773/1871980大致上是Spring集成的另一个实现。它们都需要启动线程来定期检查sftp上的新文件等。对was调度的采用可以解决这一部分的问题,但涉及一些基本的修补。另一个问题是监听JMS并将消息路由到目录(或者再次路由到sftp)——对于每条消息只能执行一次,而不是在每个节点上。
- 对于JMS,一个节点上只有一个线程将处理特定的消息
- 使用WebSphere,可以将许多EJB类型配置为仅在一个集群节点上运行。只需确保部署到集群,然后仔细查看控制台。默认设置是将查询定向到本地EJB,但是如果更改设置,它们应该只在一个节点上运行。可能发生在容器设置或部署的EJB应用程序设置下。计时器的行为很自然,就像JMS处理程序一样。我还相信会话bean、WebSphere的工作队列和计时器特性都是这样的。
我认为没有一个特性可以满足这个有趣的需求。我可以想象一个"诡计":
计时器EJB在队列上发送消息(假设每分钟1条)
配置一个具有高可用性和无可伸缩性的服务集成总线(ServiceIntegrationBus,SIB),因此HA管理器确保只有一个消息传递引擎(Me)处于活动状态。
为高性能和低资源消耗创建一个不可靠的队列。
激活规范应该配置为只侦听本地ME。
MDB实现以下逻辑:当消息到达时,它检查单线程是否活动,否则它启动线程。
这有道理吗?