我正在尝试将Spring AsyncServlet与Camel和ActiveMQ一起使用。我正在使用以下版本。
<spring.version>3.2.0.M1</spring.version>
<camel.version>2.10.0</camel.version>
<jetty.version>8.1.3.v20120416</jetty.version>
<activemq.version>5.6.0</activemq.version>
我想将消息推送到连接到服务器(Jetty)的客户端。
我的骆驼路线如下。
from("mina:udp://source_machine:9998").to("activemq:myqueue");
基于此,我在Spring/Camel配置中有以下内容。
<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="vm://localhost:61616" />
</bean>
<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
<property name="maxConnections" value="8" />
<property name="maximumActive" value="500" />
<property name="connectionFactory" ref="jmsConnectionFactory" />
</bean>
<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory" ref="pooledConnectionFactory" />
<property name="transacted" value="false" />
<property name="concurrentConsumers" value="10" />
</bean>
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="configuration" ref="jmsConfig" />
</bean>
使用上面的配置,我可以将消息输入到我的队列中(至少我不会收到任何错误。)但是,我不知道如何从这个队列中读取。
- 当使用Spring、Camel和Jetty时,这是配置ActiveMQ的正确方式吗
- 如何添加/注册MessageListener
javax.jms.MessageListener
以便从队列中读取 - 如何控制队列大小并使队列不持久
- 可以添加多个侦听器
谢谢。
您的配置看起来很适合activemq。不知道码头。您提供的代码段中没有jetty配置。
在骆驼路由中,您可以简单地使用from activemq端点来侦听队列。
from("activemq:myqueue").to("log:test");
Btw。我通常使用jms ednpoint而不是ActiveMQ。这样做的优点是,如果在某个时刻必须切换到另一个jms提供程序,则更容易切换到该提供程序。
您还可以使用connectionfactory并在bean中使用自己的DefaultMessageListenerContainer。关于如何做到这一点,请参阅spring配置,但这与camel无关。
您可以在activemq配置中控制队列大小。使用http://activemq.apache.org/producer-flow-control.html.
您不能使队列不持久,但可以将发送的消息定义为非持久。http://activemq.apache.org/how-do-i-disable-persistence.html
您可以定义许多侦听器,甚至可以使用上面from端点上的选项maxConcurrentConsumers来定义一个侦听器的线程数。