Weblogic/Message Driven Bean 处理问题
Posted
技术标签:
【中文标题】Weblogic/Message Driven Bean 处理问题【英文标题】:Weblogic/Message Driven Bean processing issue 【发布时间】:2012-01-16 02:47:16 【问题描述】:技术:
Jave EE、Weblogic 10.3、JMS
场景:
一个 EJB 模块,比如 Module_1,具有 3 个不同的消息驱动 Bean (MDB) 类,监视 3 个不同的 Java 消息队列 (JMS)。消息不断地添加到这些 bean 中。
问题:
每天一次,在某个时间,我需要重新启动整个 Weblogic Server 而不会丢失任何消息。此外,此服务器上还部署了另一个模块,例如 Module_2。而且我需要确保 Module_2 在 Module_1 之前启动。
如果任何 MDB 在预定义的关闭时间正在处理任何消息,那么我想我将不得不等待它完成。虽然不确定。
有人可以建议任何标准方法/配置来实现这一目标吗?
另外,如果 Weblogic Server 不加任何注意地直接重启会怎样?这将如何影响仍在队列中的消息和正在处理的消息?
谢谢。
【问题讨论】:
【参考方案1】:模块启动的顺序是一个配置参数:查看 config.xml 中的<deployment-order>10200</deployment-order>
。编号较低的模块在编号较高的模块之前部署。
至于关机,您需要执行“正常关机”(http://docs.oracle.com/cd/E13222_01/wls/docs81/adminguide/overview_lifecycle.html#1045901)。这应该使队列停止接受新消息,确保所有消息都被持久化,然后等待任何正在进行的消息被处理。只有这样它才会停止。
如果您在发生硬故障后重新启动,则正在进行的消息将被重新处理,因为它没有正确完成。通常,这是预期的行为。
【讨论】:
以上是关于Weblogic/Message Driven Bean 处理问题的主要内容,如果未能解决你的问题,请参考以下文章
如何摆脱 <mvc:annotation-driven />?
Spring“元素“tx:annotation-driven”的前缀“tx”未绑定。”
mvc:annotation-driven 不能解决 406 错误