0

我正在使用在 Wildfly 14 中部署的 Spring-Boot-WAR,并实现了一个连接到队列的 JmsListener。JmsListener 已将并发设置为 5,当 Spring-App 独立启动时,我看到 5 个并行工作的侦听器。但是结合 Wildfly 14,只有 1 个监听器在运行。

在 JEE 中,我将使用 @Pool 注释 MessageDrivenBean,然后可以为给定池配置最大池大小。但我认为 Spring-Listener 只是连接到大小为 1 的默认 MDB-Pool。

有没有办法将 JmsListener 与特定的 bean-instance-pool 连接起来?或者有没有其他方法可以为这个 JmsListener 定义一个单独的最大池大小?

独立的.xml

<subsystem xmlns="urn:jboss:domain:ejb3:5.0">
  ...
  <pools>
    <bean-instance-pools>
      ...
      <strict-max-pool name="individual-strict-max-pool" max-pool-size="5" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
    </bean-instance-pools>
  </pools>

消息监听器

    @JmsListener(destination = JMS_MESSAGE_NAME, concurrency = "5")
    public void receiveFromMessageQueue(Message msg) {
      ...
    }
4

1 回答 1

0

在 JEE 应用程序服务器中,JCA 规范将 JMS 连接上的 JMS 会话数限制为一个。在 Spring Boot 部署中,JmsListener 上有 5 个并发使用者。这是通过在由 Spring JMS 侦听器容器管理的一个 JMS 连接上拥有 5 个 JMS 会话来实现的。

如果您实例化自己的连接工厂(不使用 Wildfly JCA 连接工厂),那么每个连接可以有多个会话。

于 2021-11-18T14:35:57.047 回答