2011-05-19 114 views
2

问题如何停止向消息驱动Bean发送消息?

是否有可能停止驱动Bean(编程)消息,所以它不消耗新邮件,但运行的事务照常流程?

(这是How to stop message processing before undeploying?的后续)。

鉴于

  • 的JBoss 4.2.3与JBoss消息
  • 驱动Bean一则短消息,根据EJB 2.0

失败尝试

  • 我想喜欢使用MBean我但很遗憾,它会立即关闭交易(请参阅错误#EJBTHREE-1870),因此会导致很多例外情况。
  • 我试图在JMX控制台中将最大池大小降为0,但活动会话的数量完全不受影响。
  • 我可以停止排队,但是我必须在生产者中处理NameNotFoundException

回答

1

那么这里是一个虽然,几乎什么都可以用包装材料实现, 你可以让MDB保持收到消息,但引进一个布尔stopDelivery, 而要去消息业务逻辑进行处理之前,检查是否stopDelivery是 设置为true,如果是这样,请将消息重新发回到它来自的队列。

因此,即使队列还在动,但除非ü未设置stopDelivery,队列的内容是种冻结

+0

但包装MDB仍消耗的消息。在消息被重新发送到队列之前,应用程序未被部署时,消息可能会丢失。 – 2012-09-19 06:43:18

+1

看起来MDB并不适合这个场合,那么你将不得不深入1层,我建议你看看java JMS代码,你可以创建一个消息消费者,它支持receive和peek方法,所以你可以决定何时接收消息并从队列中消费它 – 2012-09-20 09:57:06

+0

http://docs.oracle.com/javaee/1.3/jms/tutorial/1_3_1-fcs/doc/jms_tutorialTOC.html – 2012-09-20 09:59:21