Я бы хотел использовать Spring Integration . Это делает настройку приложений на основе JMS действительно простой.
<bean id="commandQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="queue.command"/>
</bean>
<jms:message-driven-channel-adapter
id="jmsin" destination="commandQueue" channel="commandChannel" />
<int:channel id="commandChannel" />
Итак, в приведенном выше фрагменте XML вы создаете «канал», представляющий собой абстрактную концепцию очереди. Вы определяете свою очередь JMS как обычную, а затем просто определяете адаптер.
<service-activator input-channel="commandChannel"
ref="commandWatcher" method="processCommand">
<poller task-executor="pool">
<interval-trigger interval="100"/>
</poller>
</service-activator>
<bean id="commandWatcher" class="foo.bar.Pojo" scope="prototype"/>
<bean id="pool" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="8" />
</beans:bean>
Итак, приведенный выше код просто определяет «активатор службы», что означает, что каждые 100 мс он проверяет наличие сообщений в очереди. Затем он извлекает это сообщение и обрабатывает его в пуле потоков, передавая сообщение в POJO. Вы определяете простой метод, и он может воспринимать полезную нагрузку как строку, или, если у вас есть ее как сериализованный объект, вы можете иметь это. Если вам нужна дополнительная семантика, такая как заголовки, вы можете использовать аннотации и получить заголовки в виде карты.
Это делает JMS таким же безболезненным, как это бывает ...