我有Camel路由,它侦听传入的JMS消息。由于某种原因,路由不会向JMS replyTo地址发送响应。在以下示例中,程序挂起等待回复消息到达临时目标。如何使JMS监听路由处理消息InOut-fashion?
{ status: 200, json: Promise})
@Component("testRouteBuilder")
public class TestRouteBuilder extends RouteBuilder {
@SuppressWarnings("unchecked")
@Override
public void configure() throws Exception {
from("timer://foo?delay=2000")
.setBody(simple("hello"))
.log("request: ${body}")
.to("bean://jmsbean")
.log("reply: ${body}");
from("jms://queue:dest")
// .setExchangePattern(ExchangePattern.InOut) // Not working
.log("got message")
.log("${headers}")
.setBody(constant("reply"));
}
@Component("jmsbean")
public static class JmsBean {
@Autowired
ConnectionFactory jmsServer1;
@Autowired
ConnectionFactory jmsServer2;
public String testJms(@Body String body) throws JMSException {
Connection conn = jmsServer1.createConnection();
conn.start();
Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
Connection conn2 = jmsServer2.createConnection();
conn2.start();
Session session2 = conn2.createSession(false, Session.AUTO_ACKNOWLEDGE);
TemporaryQueue tempQueue = session2.createTemporaryQueue();
TextMessage message = session.createTextMessage();
message.setJMSCorrelationID("tuomas");
message.setJMSReplyTo(tempQueue);
message.setJMSMessageID("tuomas");
Queue dest = session.createQueue("dest");
MessageProducer producer = session.createProducer(dest);
producer.send(message);
session.close();
conn.close();
MessageConsumer consumer = session2.createConsumer(tempQueue, "tuomas");
Message reply = consumer.receive();
session2.close();
conn2.close();
return reply.getBody(String.class);
}
}
}
答案 0 :(得分:0)
AFAIK,Camel默认发送一条消息给replyTo队列。在JMS component docs属性disableReplyTo
中声明了这一点。我自己经历过这样的行为。
但是,示例中的任何使用者都不会使用您的消息。例如,您可以尝试将其发送到某个bean。