【问题标题】:Is there a portable way to limit MDBs on a JMS queue to 1?是否有一种可移植的方式将 JMS 队列上的 MDB 限制为 1?
【发布时间】:2020-10-16 22:25:42
【问题描述】:

我们有一个用例,我们需要按发送顺序处理来自 JMS 队列的数据,因此我们需要由 1 个 MDB 实例顺序处理。 我们的应用程序运行(仍然在旧的)WildFly 9 上,根据我找到的文档,我们用

注释了 MDB
@MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "maxSession", propertyValue = "1") })

但这似乎是不可移植的,因为测试环境中的 Apache ActiveMQ 和生产环境状态中的 IBM MQ

WFLYEJB0006: ActivationConfigProperty maxSession will be ignored since it is not allowed by resource adapter

那么,什么是可移植的方式来确保队列中限制为 1 个 MDB 实例,以便相同的解决方案适用于不同的 MQ 供应商?

【问题讨论】:

  • 你最后找到办法了吗?
  • @KavithakaranKanapathippillai:我们仍在试验 - 我希望在 MDB 级别拥有它,以防需要甚至只有一个适用的多个属性,但也许我们必须将其移至部署描述符并根据目标系统在构建级别对其进行维护

标签: jms java-ee-7 sequential message-driven-bean wildfly-9


【解决方案1】:

不幸的是,没有可移植的方法将 JMS 队列上的 MDB 数量限制为 1。

在大多数情况下,涉及多个“参与方”,实施可能会有很大差异,这可能是尚未标准化的原因。

例如,在 WildFly 中,您拥有由 WildFly 自己管理并在服务器的 XML 配置文件中配置的 MDB 实例池。然后在 ActiveMQ JCA 资源适配器中有一个通过 MDB 的激活配置属性配置的会话池。这些池可以以微妙的方式相互交互,并且可能需要根据用例进行调整。

但是,JCA RA 的实施可能不包括任何类型的池。可以在 RA 的提供者认为可接受的情况下实现连接,并且任何 EE 规范中都没有说它在并发方面必须以特定方式表现,因此没有控制并发消息流入的标准方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    相关资源
    最近更新 更多