我在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中工作。
任何人都可以对这个问题有所了解吗?
答案 0 :(得分:0)
我说这是预期的:当你运行一些频繁的工作时,你可能不希望在每台机器上同时执行它们,因为它们会发生冲突。你已经说过,工作必须每5分钟执行一次,而不是每5分钟执行一次(因为如果每台机器都会启动它)。
如果取下node1,我也希望node2接管执行预定作业的职责。这将是对上述假设的正确性的一个很好的测试。
此外,您不应该依赖此类作业在每个VM中执行(可能通过类加载器共享操作公共状态)。如果修改缓存的内容,则群集通信应注意使类无效。
如果您遇到此问题,则要么违反(我)假设VM中的全局状态,或者您没有正确配置群集缓存失效。