我认为这是您描述的返回地址模式 - https://camel.apache.org/return-address.html
在 junit 测试用例中有一些示例代码 - http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/ JmsInOnlyWithReplyToAsHeaderTest.java?view=markup
编辑:从上面的链接中添加一些示例代码以更好地解释它:
因此,假设我们在下面定义了以下端点,我们有一个
from("direct:start")
,
from("activemq:queue:foo")
和
from("activemq:queue:bar?disableReplyTo=true")
在我们的实际测试中,我们称这段代码为:
template.sendBodyAndHeader("direct:start", "World", "JMSReplyTo", "queue:bar");
这会向direct:start
端点发送一条消息,其中包含“World”的正文和一个名为JMSReplyTo
“queue:bar”的标头。因为我们已经指定了这个JMSReplyTo
头,一旦路由完成,它将调用头值中定义的任何端点,在这种情况下,它将调用“queue:bar”端点。
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start")
// must enable preserveMessageQos to force Camel to use the JMSReplyTo header
.to("activemq:queue:foo?preserveMessageQos=true")
.to("mock:done");
from("activemq:queue:foo")
.to("log:foo?showAll=true", "mock:foo")
.transform(body().prepend("Bye "));
// we should disable reply to to avoid sending the message back to our self
// after we have consumed it
from("activemq:queue:bar?disableReplyTo=true")
.to("log:bar?showAll=true", "mock:bar");
}
};
}
那么这如何适合您的用例呢?那么将会发生的是客户端,或者您编写的某些代码将指定JMSReplyTo
带有与如何发送响应相关的端点的标头。因此,如果他们希望将回复放置在队列中,那么JMSReplyTo
标头的值将是指定的队列端点。