2

问题

是否可以(以编程方式)停止消息驱动 Bean,使其不消耗新消息,但像往常一样处理正在运行的事务?

(这是如何在取消部署之前停止消息处理的后续行动? )。

给定

  • 带有 JBoss 消息传递的 JBoss 4.2.3
  • 根据 EJB 2.0 的消息驱动 Bean

失败的尝试

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

1 回答 1

1

好吧,这里有一个虽然,几乎所有事情都可以用一个包装器来实现,你可以让 MDB 保持接收消息,但是引入一个布尔 stopDelivery,而在消息将被业务逻辑处理之前,检查 stopDelivery 是否设置为 true,如果是, 将消息重新发送回它来自的队列。

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

于 2012-07-02T14:38:37.957 回答