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 处理问题的主要内容,如果未能解决你的问题,请参考以下文章

nnotation-driven

如何摆脱 <mvc:annotation-driven />?

Spring“元素“tx:annotation-driven”的前缀“tx”未绑定。”

mvc:annotation-driven 不能解决 406 错误

springMVC-mvc:annotation-driven

干货 | 用FreeRTOS搭建Event-Driven应用框架