我正在使用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);
}
}
答案 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的代码,它可以让我们更好地为您提供帮助。