当前位置: 首页 > 知识库问答 >
问题:

用CAMEL处理确认?

胡飞鹏
2023-03-14

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

在 Camel 中,我从各自的endpoint接收它到 jms 队列。从队列处理器拾取消息。现在处理器需要根据客户端的偏好(它们在传入请求中发送)向客户端发送确认。偏好可以是他们希望通过Web服务或JMS或文件系统接收确认。

我认为它可以以某种方式完成 http://camel.apache.org/request-reply.html 我不知何故无法进一步进行。基本上,我不确定我应该如何使用CAMEL内置功能处理从处理器到各个客户端的确认。任何方向都会有所帮助?

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

共有1个答案

贺博厚
2023-03-14

我认为这是你所描述的退货地址模式-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

编辑:从上面的链接中添加一些示例代码以更好地解释:

假设我们在下面定义了以下endpoint,我们有一个from(“direct:start”),from(“activemq:queue:foo”)和from(“activemqqueue:bar?disableReplyTo=true”)

在实际测试中,我们称此代码为:

template.sendBodyAndHeader("direct:start", "World", "JMSReplyTo", "queue:bar");

这将向direct:startendpoint发送一条消息,消息体包含“World”和一个名为JMSReplyTo的头,值为“queue:bar”。因为我们已经指定了这个<code>JMSReplyTo</code>头,所以一旦路由完成,它将调用头值中定义的任何endpoint,在这种情况下,它将呼叫“queue:bar”endpoint。

@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标头,其中包含与如何发送响应相关的endpoint。因此,如果他们希望将应答放在队列中,那么JMSReplyTo标头的值将是指定的队列endpoint。

 类似资料:
  • 我想停止路由的情况下,如果用户凭据改变,为此,我想处理但这不工作: 和错误处理器 在控制台中,我得到了这个异常,但它没有得到处理。 错在哪里? 解决方案: 添加参数到endpointURL 在路由生成器中添加异常处理程序 实现如果您将设置为true,则只能通过这种方式访问异常 这是阿帕奇骆驼留档

  • 我将我的jms队列更改为JMS1。然而,当我执行代码时,我得到一个异常。 我的期望是,每当我得到异常时,我的bean类都应该被调用,但事实并非如此。 runtimeCamelException:org.apache.camel.FailedToCreateRouteException:在以下位置创建路由route1失败:>>>到[jms1:queue:finalqSource]<<<在route:

  • 我的任务是处理路由中所有传入的消息,并将它们保存到数据库中。我的路由从webservice(camel cxf)开始,然后处理到ejb并返回soap响应。 我决定使用驼峰sql组件。就我在记录传入消息方面没有任何问题而言: 但是我不知道如何处理异常并以SOAP消息的形式保存它们。 但它将原始消息保存在数据列中。有谁能帮忙吗?

  • 我是骆驼新手,有一些关于异常处理的问题。我需要有3重试尝试的消息处理,超过尝试限制后,它需要发送消息到deadletterchannel。如何组合maximumRedeliveries和ErrorHandler?

  • 我是Camel Apache的新手,在异常处理方面遇到了一些麻烦。我要做的是捕捉SalesforceException,然后根据StatusCode采取不同的操作。 例如,当statusCode>=500时,我必须尝试重新传递消息。这是一个技术错误。当statusCode<500时,我必须将请求和响应组合在一起,并将其放在FailureQueue上。

  • 我是骆驼的新手。我将有一个文件处理与骆驼,但我还没有找到一个现成的解决方案,我的情况。我必须一起处理多个文件,以防它们存在。这些文件上载到特定文件夹时会有一些延迟(例如:我们有两个文件a.csv和b.csv,a.csv上载的时间比b.csv晚10秒,反之亦然)。此外,如果一个文件缺席超过特定的时间,我只需要处理一个文件。有谁能帮我选一个图案吗?据我所知,我可以使用camel过滤器来确保我们已经有了