如何阻止消息传递到消息驱动Bean?

时间:2011-05-19 10:50:50

标签: java-ee jboss jmx message-driven-bean

问题

是否可以停止消息驱动Bean(以编程方式),以便它不会消耗新消息,而是像往常一样运行事务处理?

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

鉴于

  • 使用JBoss Messaging的JBoss 4.2.3
  • 根据EJB 2.0的消息驱动Bean

尝试失败

  • 我想使用MBean方法stopDelivery,但遗憾的是它会立即关闭事务(请参阅bug #EJBTHREE-1870),从而导致很多异常。
  • 我尝试在JMX控制台中将最大池大小减少到0,但活动会话数根本不受影响。
  • 我可以阻止队列,但我必须处理生产者中的NameNotFoundException

1 个答案:

答案 0 :(得分:1)

这里有一个,但几乎所有东西都可以通过包装来实现, 您可以让MDB继续接收消息,但引入布尔stopDelivery, 在消息将由业务逻辑处理之前,检查stopDelivery是否 设置为true,如果是这样,请将消息重新发送回您的队列。

所以即使队列仍然在移动,但除非你取消设置stopDelivery,否则队列的内容会有点冻结