我在任何地方的JBoss文档中都找不到这个,所以我在这里问。
多个非非-clustered JBoss实例可以访问和共享相同的定时器表(如EJB2 TIMERS服务所使用的),而不互相打扰,或者每个实例都需要自己的表吗?
在集群的情况下,集群中的节点是否都有访问定时器表的权限,或者它们是否直接通过网络共享信息?
谢谢您的澄清!
富足
发布于 2013-07-06 22:45:21
这是个老生常谈的问题,但也许对某些人还是有用的,所以我会试着回答。
假设同一个定时器表可以在集群中没有执行的不同服务器之间共享(实际上我认为这是可能的),那么将出现几个与TimerService实现相关的问题,例如:假设每个服务器都部署了相同的定时器,那么每个定时器的实例将与此表上的不同记录相关联吗?如果是这样,则在计时器过期时将多次执行业务逻辑。如果部署过程只生成每个定时器的记录,那么当不同的TimerService尝试同时访问/修改相同的信息时,TimerServices是否正确执行?
另一方面,如果这个想法背后的动机是为了实现某种容错,那么仍然存在这样的问题:您的所有服务器都必须部署了相同的计时器,否则TimerService可以尝试执行未部署在服务器中的定时器。
提供高可用性的解决方案已经实现,称为HATimerService。
在集群中只有一个表,但区别在于每次存在唯一的TimerService活动,当执行TimerService的节点失败时,另一个节点成为主节点,因此由于数据库中有可用的信息,因此不存在节点之间的计时器信息交换。
https://stackoverflow.com/questions/3156795
复制相似问题