使用CAMEL处理致谢?

时间:2014-04-11 10:43:03

标签: java apache-camel enterprise-integration

我让客户通过不同的方式发送请求,例如网页请求,http请求,肥皂请求或通过其他渠道。

在Camel中,我从各自的端点接收到jms队列。从队列处理器中获取消息。处理器 需要根据客户的偏好(他们在传入的请求中发送)将确认发送给客户。。参考 可以是他们希望通过webservice或jms或文件系统接收任何确认。

我认为可以用http://camel.apache.org/request-reply.html位来完成,我无法继续下去。基本上我不确定 我应该如何使用CAMEL内置功能处理从处理器到各个客户端的确认。任何方向都会有帮助吗?

更新: - 客户端首选项存储在来自客户端的传入请求消息中。您还可以假设它存储在系统(db或属性文件)

中的某个位置

1 个答案:

答案 0 :(得分:1)

我认为这是您所描述的返回地址模式 - 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标头的值将是指定的队列端点。