Я уже несколько дней слежу за форумами и веб-сайтами о том, как создать пул потокового подписчика JMS без особой удачи.При использовании очереди с контейнером 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 одновременно.
Iзатем попытался использовать исполнителя задач с config:
<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-container (если я не неправильно понял).Тем не менее, я получал только один поток за раз.
Я немного растерялся и начинаю думать, что у Spring нет функции поддержки нескольких потоков при подписке на данные тем JMS.Если это так, мои варианты выглядят так:
- реализовать мой собственный пул потоков.планировать subscriber-> цикл через jmsTmplate.receive () data-> передавать каждое сообщение в предопределенный поток
- возвращаться обратно в EJB (что я не хочу делать)
- что-то еще яЯ еще не думаю о
Любая помощь будет принята с благодарностью.