Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring主题订阅者线程池_Java_Multithreading_Spring_Jms_Publish Subscribe - Fatal编程技术网

Java Spring主题订阅者线程池

Java Spring主题订阅者线程池,java,multithreading,spring,jms,publish-subscribe,Java,Multithreading,Spring,Jms,Publish Subscribe,几天来,我一直在浏览论坛和网站,了解如何在运气不好的情况下线程池一个SpringJMS订户。然而,当将队列与jms:listener容器一起使用时,会有一个并发属性,该属性的主题是将并发性保持在1。考虑到这一点,我对主题订阅服务器的线程池有哪些选择 我从MessageListener路由开始,通过以下方式实现onMessage: <bean id="messageListener" class="com.app.mdp.Receiver"/> <jms:list

几天来,我一直在浏览论坛和网站,了解如何在运气不好的情况下线程池一个SpringJMS订户。然而,当将队列与jms:listener容器一起使用时,会有一个并发属性,该属性的主题是将并发性保持在1。考虑到这一点,我对主题订阅服务器的线程池有哪些选择

我从MessageListener路由开始,通过以下方式实现onMessage:

    <bean id="messageListener" class="com.app.mdp.Receiver"/>
    <jms:listener-container container-type="default"
        connection-factory="connectionFactory" acknowledge="auto" concurrency="1"
        destination-type="topic" prefetch="1">
        <jms:listener destination="topTopic" ref="messageListener"
            method="onMessage" subscription="ASub" />
    </jms:listener-container>

    <bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="jms/jms-top-notx" />
    </bean>

问题是我一次最多只能有一个线程从JMS接收数据

然后,我尝试将任务执行器与配置一起使用:

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
  <property name="corePoolSize" value="10" />
  <property name="maxPoolSize" value="20" />
  <property name="queueCapacity" value="0" />
</bean> 

..但它似乎要求并发在jms:listener容器设置中具有更大的价值(除非我有误解)。不过,我一次只收到一个线程

我有点不知所措,开始认为spring在订阅JMS主题数据时没有支持多线程的功能。如果是这样,我的选择似乎是:

  • 实现我自己的线程池。计划订阅服务器->通过jmsTmplate.receive()数据循环->将每条消息传递给预定义的线程
  • 恢复到EJB(我不想这样做)
  • 还有一些我还没有想到的事情

任何帮助都将不胜感激。

您是否正在将Websphere用于JMS。如果是,那么Websphere中有一个配置,您可以在其中配置每次可以为应用程序创建的连接和会话的数量。 假设您有10个会话和10个连接,那么您将有100个连接(通道)打开到MQ服务器。请参阅此链接: