0

我正在尝试将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 配置中基于this有以下内容。

    <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>

使用上述配置,我可以将消息输入到我的队列中(至少我没有收到任何错误。)但是,我不知道如何从这个队列中读取。

  1. 这是使用 Spring、Camel 和 Jetty 时配置 ActiveMQ 的正确方法吗?
  2. 如何添加/注册 MessageListenerjavax.jms.MessageListener以便可以从队列中读取。
  3. 如何控制队列大小并使队列非持久化?
  4. 可以添加多个监听器

谢谢。

4

1 回答 1

0

你的配置看起来很适合 activemq。不知道码头。您提供的代码段中没有码头配置。

在骆驼路由中,您可以简单地使用 from activemq 端点来监听队列。

from("activemq:myqueue").to("log:test");

顺便提一句。我通常使用 jms ednpoint 而不是 ActiveMQ 。这样做的好处是,如果您必须在某些时候切换到另一个 jms 提供程序,它会更容易。

您还可以使用 connectionfactory 并在 bean 中使用您自己的 DefaultMessageListenerContainer。请参阅 spring 配置以了解如何执行此操作,但这与骆驼无关。

您可以在 activemq 配置中控制队列大小。使用http://activemq.apache.org/producer-flow-control.html

您不能使队列不持久,但可以将发送的消息定义为非持久性。http://activemq.apache.org/how-do-i-disable-persistence.html

您可以定义许多侦听器,甚至可以使用上面 from 端点上的选项 maxConcurrentConsumers 为一个侦听器定义线程数。

于 2012-07-22T06:22:18.490 回答