Liferay调度程序不会在群集上触发

时间:2015-08-14 11:45:53

标签: liferay quartz-scheduler liferay-6 weblogic-10.x

我在portlet中使用了调度程序,每5分钟就会触发一次。

以下是配置: 的liferay-portlet.xml中:

<scheduler-entry>
  <scheduler-description>
   This scheduler is used to invoke the update and delete results
  </scheduler-description>
 <scheduler-event-listener-class>com.test.myown.scheduler.action.GetResultsScheduler</scheduler-event-listener-class>
  <trigger>
     <simple>
        <simple-trigger-value>5</simple-trigger-value>
        <time-unit>minute</time-unit>
      </simple>
  </trigger>
</scheduler-entry> 

我的班级是:

  public class GetResultsScheduler implements MessageListener{
     public void receive(Message message) throws MessageListenerException {
         // some code here
     }
  }

我们正在使用liferay 6.1,weblogic服务器 这里的问题是,服务器有2个节点, 调度程序在node1中触发5分钟 节点2中没有调度程序触发

我的意思是,调度程序在节点1中工作,而不在node2中工作。

任何人都可以对这个问题有所了解吗?

1 个答案:

答案 0 :(得分:0)

我说这是预期的:当你运行一些频繁的工作时,你可能不希望在每台机器上同时执行它们,因为它们会发生冲突。你已经说过,工作必须每5分钟执行一次,而不是每5分钟执行一次(因为如果每台机器都会启动它)。

如果取下node1,我也希望node2接管执行预定作业的职责。这将是对上述假设的正确性的一个很好的测试。

此外,您不应该依赖此类作业在每个VM中执行(可能通过类加载器共享操作公共状态)。如果修改缓存的内容,则群集通信应注意使类无效。

如果您遇到此问题,则要么违反(我)假设VM中的全局状态,或者您没有正确配置群集缓存失效。