【发布时间】:2016-02-12 14:37:23
【问题描述】:
是否有任何标准方法来控制 MDB 中的并发和消耗?我能找到的每条建议似乎都是特定于应用程序服务器或资源适配器的(例如 maxSession @ActivationConfigProperty)。
问题™
我们在双节点 JBoss 设置 (EAP 6.3) 上运行一些相对繁重的分析作业,并希望并行化作业以及对并发作业的数量施加上限,这样我们就不会淹没数据库服务器。作业从 Web 前端开始,只要有空闲的处理槽就应该开始 - 没有优先级或排序限制。我们使用消息队列(IBM WMQ,因为政治原因)将“开始分析”消息分发到节点。
目前进展
根据各种建议进行大量摆弄,结果证明是非工作资源适配器特定货物崇拜错误信息™:),我认为通过定义 EJB 池解决了问题为 MDB。这确实解决了并发问题,但不幸的是,似乎没有空闲 MDB 的节点仍然会拉取队列中的消息 - 这可能会使一个节点未充分利用,而另一个节点则满载积压。
如果我正确理解了IBM documentation,则应该可以使用 readAheadAllowed 配置选项来控制此行为,但这似乎根本不会影响我的结果。
那么,有没有:
- 控制消息消耗的 Java EE 标准方法?
- 一个(工作的)IBM WQ 特定配置选项?
- JBoss 特有的修复方法?
- 其他一些我没有想到的智能解决方案?
或者,我可能会重新设计架构以使用主题队列,并让每个节点按照UPDATE Projects SET Status='inprogress' WHERE Id=42 AND Status='inqueue'; 的方式尝试一些事情 - 但如果我不需要,我宁愿不去那里,主要是因为更改队列所需的更改请求:)
【问题讨论】:
标签: jakarta-ee jboss ibm-mq message-driven-bean