技术:
Jave EE,Weblogic 10.3,JMS
情境:
EJB模块,比如Module_1,具有3个不同的消息驱动Bean(MDB)类,监视3个不同的Java Mssage Queues(JMS)。消息不断被添加到这些bean中。
问题:
每天,在某个时间,我需要重新启动整个Weblogic Server而不会丢失任何消息。此外,还在此服务器上部署了另一个模块,例如Module_2。我需要确保Module_2在Module_1之前启动。
如果任何MDB在预定义的关机时间处理任何消息,那么我想我将不得不等待它完成。虽然不确定。
有人可以建议任何标准方法/配置来实现吗?
此外,如果直接重新启动Weblogic Server而没有任何关心怎么办?这将如何影响仍在队列中的消息和处理中间的消息?
感谢。
答案 0 :(得分:1)
启动模块的顺序是配置参数:在config.xml中查看<deployment-order>10200</deployment-order>
。较低编号的模块在较高编号的模块之前部署。
关于关机,您需要执行“优雅关机”(http://docs.oracle.com/cd/E13222_01/wls/docs81/adminguide/overview_lifecycle.html#1045901)。这应该使队列停止接受新消息,确保所有消息都保持不变,然后等待任何正在处理的消息被处理。只有这样它才会停止。
如果在硬故障后重新启动,则会重新处理正在进行的消息,因为它未正确完成。通常,这是预期的行为。