【问题标题】:Processing Acknowledgments with CAMEL?使用 CAMEL 处理确认?
【发布时间】:2014-05-25 11:28:40
【问题描述】:

我有客户通过不同的方式发送请求,例如 web 请求、http 请求、soap 请求或通过其他渠道。

在 Camel 中,我将其从各个端点接收到 jms 队列。从队列处理器拿起消息。现在处理器 需要根据客户的偏好(他们已在传入请求中发送)将确认发送给客户。偏好 他们是否希望通过 web 服务或 jms 或文件系统接收确认。

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

更新:- 客户端偏好存储在来自客户端的传入请求消息中。您也可以假设它存储在系统中的某个位置(数据库或属性文件)

【问题讨论】:

  • 客户将如何指定他们的偏好?
  • @Matthew Wilson 查看我的更新

标签: java apache-camel enterprise-integration


【解决方案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 标头的值将是指定的队列端点。

【讨论】:

  • 是的,马修,我看起来像这样。但我不知道进程(回复者)如何将回复消息发送到不同的 prferres 渠道,比如它可以是文件请求/webservice/jms 请求到客户端。你能详细说明一下或者给我一些关于我的要求的 returnAddress 的好例子吗,尝试谷歌但找不到任何相关的:(
  • 用单元测试的解释编辑了我的答案
  • 但我需要根据客户偏好将回复发送给客户。我没有得到如何将回复发送到客户端的文件系统或 Web 服务?
  • 除非您的服务器有权访问客户端文件系统,否则它无法访问它,除非您使用 FTP 或类似的东西。如果客户端公开了一个服务器可以访问的 web 服务,那么你肯定可以调用它吗?
  • 假设我的服务器可以访问客户端特定的目录,我可以在其中放置我的响应。现在我如何用骆驼返回地址来实现它?
猜你喜欢
  • 1970-01-01
  • 2016-07-11
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多