繁体   English   中英

是否有一种可移植的方式将 JMS 队列上的 MDB 限制为 1?

[英]Is there a portable way to limit MDBs on a JMS queue to 1?

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

@MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "maxSession", propertyValue = "1") })

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

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

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

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

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

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

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

在我的 Wildfly 20.0.1 中,该解决方案有效,但使用关键字“maxSessions”。

我发现了这个: https://access.redhat.com/discussions/2702311我自己尝试了这个解决方案,我注意到没有详细说明并发消息。

尝试应用此配置:

@MessageDriven(activationConfig = {
        @ActivationConfigProperty(propertyName = "maxSessions", propertyValue = "1")

...

更新

其他参考https://developer.jboss.org/thread/273204

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM