从bean返回到ActiveMQ队列的Camel响应

时间:2014-03-10 09:25:28

标签: java spring apache-camel activemq

我正在使用Camel(使用camel-ejb依赖项)将消息从ActiveMQ路由到我的bean的方法。到目前为止,我已经在requestHandler bean中收到了消息。

<amq:connectionFactory id="amqConnectionFactory"
    brokerURL="tcp://localhost:61616" />

<bean class="org.springframework.jms.connection.CachingConnectionFactory"
    id="connectionFactory">
    <constructor-arg ref="amqConnectionFactory" />
    <property name="sessionCacheSize" value="100" />
</bean>

<bean class="org.springframework.jms.core.JmsTemplate" id="jmsTemplate">
    <constructor-arg ref="connectionFactory" />
</bean>

<camel:camelContext id="camelContext">
    <camel:route>
        <camel:from uri="activemq:queue:inQueue" />
        <camel:setExchangePattern pattern="InOut"/>
        <camel:to uri="bean:requestHandler?method=handleRequest" />
    </camel:route>
</camel:camelContext>

如果我现在更改handleRequest以返回一个String,我将如何修改我的路由以将队列中的String返回给发送消息的人?

谢谢!

编辑:

客户端代码:

(在camel-context.xml中)

<camel:camelContext id="camel-client">
    <camel:template id="camelTemplate" />
</camel:camelContext>

<bean id="jms" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="brokerURL" value="tcp://localhost:61616" />
</bean>

(在CamelClient.java中)

public class CamelClient  {
    public static void main(String[] args) {

        ApplicationContext context = new ClassPathXmlApplicationContext("camel-context.xml");
        ProducerTemplate pTemplate = context.getBean("camelTemplate", ProducerTemplate.class);

        System.out.println("Message Sending started");
        String ret = pTemplate.requestBody("activemq:queue:inQueue", "47264", String.class);
        System.out.println("Message received:" + ret);
    }
}

3 个答案:

答案 0 :(得分:2)

开箱即用。如果JMS消息具有JMSReplyTo头,则当路由完成时,Camel发回回复消息。所以在你的bean中,只需返回你要发回的内容。

所以,如果你的方法是

public String handleRequest(String input) {
   return "Hello " + input;
}

然后你将发回一个字符串,其中包含hello&lt;这里的原始身体&gt;

我建议您花点时间阅读此页

因为JMS和camel-jms有很多选择,所以花点时间来了解它。

答案 1 :(得分:1)

您必须强制交换模式为inout:jms:MyQueue?exchangePattern = InOut

有关驼峰文档的更多信息:http://camel.apache.org/request-reply.html

答案 2 :(得分:1)

尝试在路线中添加日志步骤

<camel:route>
    <camel:from uri="activemq:queue:inQueue" />
    <camel:setExchangePattern pattern="InOut"/>
    <camel:to uri="bean:requestHandler?method=handleRequest" />
    <camel:to uri="log:reply" />
</camel:route>

并向我们展示requestHandler bean的代码,它可以让我们更好地为您提供帮助。