`
salever
  • 浏览: 255680 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Camel组件之ContentEnricher

 
阅读更多

Camel supports the Content Enricher from the EIP patterns using a Message Translator, an artibrary Processor in the routing logic or using the enrich DSL element to enrich the message.

Enricher用来对已有的Message进行加工,如下图中所示的,Enricher从某个地方读取Resource,然后输出加工完毕的Message。如何将获取的Resource与原始的Message加工,则由用户指定。

 

 

对于Message的加工,可以通过一些方式实现,比如使用Velocity:

 

 

from("activemq:My.Queue").
  to("velocity:com/acme/MyResponse.vm").
  to("activemq:Another.Queue");
 

 

纯Java代码通过setBody()实现:

 

 

from("direct:start").setBody(body().append(" World!")).to("mock:result");
 

 

当然还可以使用Bean实现:

 

 

from("activemq:My.Queue").
  beanRef("myBeanName", "myMethodName").
  to("activemq:Another.Queue");

 

 

但是这里Content Enricher,来实现Message的加工。

 

 

Camel comes with two flavors of content enricher in the DSL

  • enrich: enrich is using a Producer to obtain the additional data. It is usually used for Request Reply messaging, for instance to invoke an external web service.This operation merges data retrieved from another source using aproducer.
  • pollEnrich:pollEnrich on the other hand is using a Polling Consumer to obtain the additional data. It is usually used for Event Message messaging, for instance to read a file or download a FTP file.This operation merges data retrieved from another source usinga consumer.
对于这2种方式的理解:
 写道
The difference between pollEnrich and enrich
The difference between pollEnrich and enrich is that the former uses a consumer
and the latter a producer to retrieve data from the source. Knowing the difference is
important: the file component can be used with both, but using enrich will write the
message content as a file; using pollEnrich will read the file as the source, which
is most likely the scenario you’ll be facing when enriching with files. The HTTP component
only works with enrich; it allows you to invoke an external HTTP service and
use its reply as the source.
 
enrich以producer的方式获取数据,而pollEnrich则是以consumer的方式获取数据。何为producer,何为consumer?在这里(仅限这里),可以把在某个endpoint上提供服务叫做producer,获取服务叫做consumer。比如File组件,向文件夹中“提供”(写)新的文件为producer,而从文件夹里面“消费”(读取)文件为consumer。某些组件只能某种方式,比如HTTP组件,它只能作为consumer,调用一个HTTP的web 服务,然后获取reply作为Resource来加工。

看一个简单的enrich示例:

from("direct:start")
.enrich("direct:resource", aggregationStrategy)
.to("direct:result");

from("direct:resource")
 
public class ExampleAggregationStrategy implements AggregationStrategy {

    public Exchange aggregate(Exchange original, Exchange resource) {
        Object originalBody = original.getIn().getBody();
        Object resourceResponse = resource.getOut().getBody();
        Object mergeResult = ... // combine original body and resource response
        if (original.getPattern().isOutCapable()) {
            original.getOut().setBody(mergeResult);
        } else {
            original.getIn().setBody(mergeResult);
        }
        return original;
    }
    
}
 
上面提到“如何将获取的Resource与原始的Message加工,则由用户指定”,这里就需要使用AggregationStrategy了,方法 

 public Exchange aggregate(Exchange original, Exchange resource)
 
将original——原始的Message和resource——获取的Resource进行加工,返回新的Message。
 

下面看看pollEnricher的示例:

The pollEnrich works just as the enrich however as it uses a Polling Consumer we have 3 methods when polling

  • receive
  • receiveNoWait
  • receive(timeout)
几个主要的参数:
uri

The endpoint uri for the external servie to enrich from. You must use either uri or ref.

获取Resource的Endpoint URI

ref

Refers to the endpoint for the external servie to enrich from. You must use either uri or ref.

获取Resource的Endpoint的reference(与URI而这必选其一

strategyRef

Refers to an AggregationStrategy to be used to merge the reply from the external service, into a single outgoing message. By default Camel will use the reply from the external service as outgoing message.

加工的Strategy

timeout 0

Timeout in millis to use when polling from the external service. See below for important details about the timeout.

超时时间


By default Camel will use the receiveNoWait
If there is no data then the newExchange in the aggregation strategy is null.

没有数据的时候,其中的一个参数为null

You can pass in a timeout value that determines which method to use

  • timeout is -1 or negative then receive is selected
  • timeout is 0 then receiveNoWait is selected
  • otherwise receive(timeout) is selected

Data from current Exchange not used
pollEnrich does not access any data from the current Exchange which means when polling it cannot use any of the existing headers you may have set on theExchange. For example you cannot set a filename in the Exchange.FILE_NAME header and use pollEnrich to consume only that file. For that you must set the filename in the endpoint URI.

注意:当前的Exchange的数据没有用,也不要试图想从当前的Exchange(这里等同于Message)获取任何信息,比如Header。

简单的pollEnricher示例:

from("direct:start")
  .pollEnrich("file:inbox?fileName=data.txt")
  .to("direct:result");
 


 

分享到:
评论

相关推荐

    apache camel 集成组件 教程

    《Camel in Action》是一本由 Claus Ibsen 和 Jonathan Anstey 共同撰写的书籍,这本书是学习 Apache Camel 的重要参考资料之一。书中涵盖了以下内容: - **基础知识介绍:** 第一部分“First Steps”通过两个章节...

    Apache Camel 集成组件.rar

    3. **JDBC**: JDBC(Java Database Connectivity)组件允许 Camel 直接与数据库进行交互,执行 SQL 查询、存储过程和其他数据库操作。这为数据集成提供了便利,使得 Camel 可以整合不同来源的数据。 4. **Jetty**: ...

    ApacheCamel-JDBC

    Apache Camel 的强大之处在于其灵活的集成能力。JDBC组件可以与其他组件(如定时任务、消息队列等)配合使用,形成更复杂的业务流程。 通过学习和实践"Apache Camel-JDBC",开发者可以更好地利用Camel的灵活性和...

    Camel in action(camel实战)

    - 路由是 Camel 的核心功能之一,它允许开发者定义消息应该如何在不同的端点之间流动。这包括简单的单向路由、复杂的分发路由等。 **3. 数据转换** - Camel 提供了丰富的工具来转换消息的数据格式。无论是简单的...

    亲测好用——Apache Camel简介以及使用场景.pptx.zip

    - **模块化**:Camel 允许你按需选择和组合组件,降低复杂性。 - **高可测试性**:由于其声明式的路由定义,单元测试和模拟变得更加简单。 - **社区支持**:拥有广泛的社区支持和丰富的文档资源。 5. **实战应用...

    Apache Camel 核心组件.rar

    apache骆驼23核心组件下载,bean browse calss contreol bus date format 等等等等23核心组件,谷歌翻译后手动修改常用语法,耗时一个月成果,markdown文件

    Camel服务集成,服务编排操作文档

    Camel拥有丰富的组件库,每个组件都封装了特定的集成技术。例如,HTTP组件用于处理HTTP请求,FTP组件则用于与FTP服务器交互。通过这些组件,开发者无需深入了解底层技术细节,即可轻松实现集成。 6. **Camel EIPs*...

    camel-mqtt-paho:这是基于 Eclipse MQTT Paho 客户端的 Java 实现的 MQTT Apache Camel 组件的项目页面。 开发此组件是为了在应用程序和 RSMB 代理实现之间转换创建 MQTT 消息

    基于 Eclipse MQTT Paho 的 MQTT Apache Camel 组件 以下项目为基于 Eclipse Foundation 的 MQTT Paho 项目的 Apache Camel 组件提供源代码(请参阅 )。 该组件是作为研究工作的一部分开发的,因为原始可用的 MQTT ...

    [Camel实战].(Camel.in.Action).Claus.Ibsen&Jonathan;.Anstey.文字版

    ### Apache Camel 实战知识点概述 #### 一、Apache Camel 简介 - **定义**:Apache Camel 是一个强大的开源框架...书中不仅提供了丰富的理论知识,还有大量的实践案例和代码示例,是学习Camel不可或缺的经典教材之一。

    Apache Camel中文开发使用指南.zip

    这些模式是解决企业系统集成中常见问题的最佳实践,而Apache Camel则将这些模式实现为可重用的组件,使得开发者可以通过简单的DSL(Domain Specific Language)来应用这些模式。 1. **DSL与路由定义**:Apache ...

    该组件现在在Camel2.19.0中可用_Java_Makefile_下载.zip

    标题中的“该组件现在在Camel2.19.0中可用”指的是Apache Camel项目中的一个特定组件在版本2.19.0中已经可以使用。Apache Camel 是一个流行的开源集成框架,它允许开发者通过一系列预定义的组件(如HTTP、FTP、MQTT...

    camel in action 中文版 第一章

    Camel 的基本原则之一是不会假设任何你需要处理的数据,这是很重要的一点,因为它给你们开发者一个集成任何系统的一个机会,不需要转换你的数据为另外的一种公认格式。 1.2 Camel 的主要特点 Camel 提供了高水平的...

    ApacheCamel-Timer

    Timer 组件是 Apache Camel 中的一个重要部分,它提供了定时触发事件的功能,类似于 Java 中的 javax.swing.Timer 或者 Quartz Scheduler。 在 Apache Camel 中,Timer 组件主要用于创建周期性的事件源,这些事件...

    Apache Camel 框架之---JMS路由.docx

    Apache Camel 框架之 JMS 路由 Apache Camel 框架实现的 JMS 路由是指使用 Apache Camel 框架来实现 Java 消息服务(JMS)的路由。JMS 是一个 Java API,用于在 Java 应用程序之间进行消息传递。Apache Camel 框架...

    Apache Camel 源码分析.rar

    最后,我们来看 `mybatis` 组件,它结合了流行的 MyBatis ORM 框架,使得 Camel 能够无缝地集成到基于 MyBatis 的数据访问层。源码分析将揭示 Camel 是如何与 MyBatis 的映射器接口协作,以及如何处理 SQL 查询和...

    Camel所有示例

    Camel MyBatis组件将Camel与MyBatis集成,使得在Camel路由中可以直接执行数据库操作。示例可能包含如何定义数据源、编写XML映射文件、调用SQL查询或更新,并将结果转换为Camel可处理的数据格式。 3. **Camel ...

    pgevent:用于处理 PostgreSQL LISTENNOTIFY 事件的 Camel 组件

    用法(尚未工作) 您可以像大多数其他 Camel 组件一样通过 URI 参数配置此组件。 下面列出了可能的参数: String host = "localhost";Integer port = 5432;String database;String channel;String user = "postgres...

    camel-manual-2.10.4.pdf

    - 组件附录:详细介绍各种Camel组件的功能和使用方法。 - 索引:方便用户查找文档中的关键词和短语。 如果读者需要更详细的信息,建议访问StackOverflow参与关于Camel的讨论,阅读相关帖子和评论,并浏览推荐的链接...

    ApacheCamel-JMS-ActiveMQ

    Camel提供了丰富的组件来处理各种数据源,例如File组件用于读取本地文件,而JMS组件则用于连接到ActiveMQ并发布消息。开发者可以使用简单的DSL(Domain Specific Language)或者XML配置来定义路由规则。 在这个...

    apache-camel-3.7.0_数据同步_

    1. **组件**:Apache Camel 包含了大量的预构建组件,如JDBC(Java Database Connectivity)用于与数据库交互,FTP/FTPS/SFTP用于文件传输,MQTT和AMQP用于消息队列,以及HTTP/HTTPS用于Web服务等。这些组件使得数据...

Global site tag (gtag.js) - Google Analytics