我无法在任何地方的JBoss文档中找到这个,所以我在这里问。
多个非聚集的JBoss实例可以访问和共享相同的TIMERS表(由EJB2 Timers Service使用)而不会相互紊乱,还是每个人都需要自己的表?
对于群集,群集中的节点是否都可以访问TIMERS表,或者它们是否直接通过网络共享信息?
提前感谢您的澄清!
富
答案 0 :(得分:1)
这是一个老问题,但也许对某人有用,所以我会尽力回答。
假设可以在不在集群中执行的不同服务器之间共享相同的Timers表(实际上我认为这是可能的)将出现与TimerService实现相关的几个问题,例如:假设每个服务器已部署了相同的Timers,会将每个Timer的实例与此表上的不同记录相关联吗?如果是这样,当计时器到期时,业务逻辑将被执行多次。如果部署过程仅为每个Timer生成一条记录,那么当不同的TimerServices尝试同时访问/修改相同的信息时,TimerService是否正确执行?
另一方面,如果这个想法背后的动机是实现某种容错,那么仍然存在所有服务器必须部署相同Timers的问题,否则TimerService可以尝试执行不是的Timer部署在服务器上。
提供高可用性的解决方案已经实施,称为HATimerService。
在集群中只有一个表,但区别在于每次存在唯一的TimerService活动,当执行TimerService的节点发生故障时,另一个节点成为主节点,因此节点之间不存在定时器信息交换由于信息在数据库中可用