`
salever
  • 浏览: 254218 次
  • 性别: 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");
 


 

分享到:
评论

相关推荐

    一个采用MVC架构设计、Java实现的泡泡堂游戏。.zip

    一个采用MVC架构设计、Java实现的泡泡堂游戏。zip是一个基于Java语言开发的项目,旨在通过实践帮助初学者理解MVC(Model-View-Controller)设计模式在游戏开发中的应用。该项目不仅涵盖了游戏逻辑和用户交互,还注重代码结构和可维护性。项目的核心是MVC架构,它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。模型负责处理数据和业务逻辑,视图负责展示数据,控制器则作为两者之间的桥梁,处理用户输入并更新视图。这种设计模式有助于提高代码的可读性和可维护性,同时也使得项目的扩展和修改变得更加容易。该资源适合初学者学习,因为它的难度适中,功能清晰。通过这个项目,开发者可以深化对Java语言的理解,掌握MVC模式的应用,同时提升在游戏开发方面的能力。此外,项目源代码是公开的,初学者可以直接下载使用,查看源代码,理解项目的实现方式,也可以在此基础上进行修改和扩展,以进一步提高自己的编程技能。总之,“一个采用MVC架构设计、Java实现的泡泡堂游戏.zip”是一个宝贵的学习资源,它为初学者提供了一个实践平台,帮助他们在游戏开发中学习和成长。

    基于java的坦克大战游戏.zip

    基于Java的坦克大战游戏是一款经典的射击类游戏,通过Java编程语言实现。这款游戏不仅涵盖了面向对象编程、多线程处理和图形绘制等关键技术,还运用了Socket进行客户端与服务器端的通信,使玩家能够通过网络进行对战。游戏中,玩家需要操纵坦克守卫基地,同时尽可能摧毁敌方坦克,并有机会获得超级武器来提升坦克属性。其丰富的功能模块和高度互动性,使其成为学习和实践Java编程技术的优秀资源。

    原版apsw-3.39.4.0-cp311-cp311-win_arm64.whl-下载即用直接pip安装.zip

    安装前的准备 1、安装Python:确保你的计算机上已经安装了Python。你可以在命令行中输入python --version或python3 --version来检查是否已安装以及安装的版本。 个人建议:在anaconda中自建不同python版本的环境,方法如下(其他版本照葫芦画瓢): 比如创建python3.8环境,anaconda命令终端输入:conda create -n py38 python==3.8 2、安装pip:pip是Python的包管理工具,用于安装和管理Python包。你可以通过输入pip --version或pip3 --version来检查pip是否已安装。 安装WHL安装包 1、打开命令行(或打开anaconda命令行终端): 在Windows上,你可以搜索“cmd”或“命令提示符”并打开它。 在macOS或Linux上,你可以打开“终端”。 2、cd到whl文件所在目录安装: 使用cd命令导航到你下载的whl文件所在的文件夹。 终端输入:pip install xxx.whl安装即可(xxx.whl指的是csdn下载解压出来的whl) 3、等待安装完成: 命令行会显示安装进度,并在安装完成后返回提示符。 以上是简单安装介绍,小白也能会,简单好用,从此再也不怕下载安装超时问题。 使用过程遇到问题可以私信,我可以帮你解决! 收起

    钢材表面缺陷检测数据集

    钢材表面缺陷检测数据集是一个专门针对钢材表面缺陷检测的深度学习训练与测试资源。这个数据集的创建旨在推动钢铁工业中自动化检测技术的发展,提高生产效率和产品质量。它包含了大量经过精心标注的真实钢材图像,用于训练和验证深度学习模型,特别是针对目标检测任务的算法,如YOLO(You Only Look Once)。 一、表面缺陷检测的重要性: 在钢铁制造过程中,表面缺陷可能会影响材料的性能和寿命,甚至导致结构的失效。因此,及时、准确地检测出这些缺陷至关重要。传统的检测方法依赖于人工视觉检查,成本高且易受主观因素影响。随着机器学习和深度学习技术的进步,自动化检测已成为解决这一问题的有效途径。 二、深度学习在表面缺陷检测中的应用: 1. YOLO(You Only Look Once):YOLO是一种实时的目标检测系统,以其快速的检测速度和相对较高的准确性而受到广泛关注。在NEU-DET数据集中,YOLO可以被训练来识别并定位钢材表面的缺陷,如裂纹、锈斑、凹痕等。 2. 特征提取:深度学习模型,如卷积神经网络(CNN),能自动从图像中学习高级特征,这对于识别复杂的表面缺

    基于java的微信小程序健身房私教预约系统答辩PPT.pptx

    基于java的微信小程序健身房私教预约系统答辩PPT.pptx

    astropy-5.0.4-cp310-cp310-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    基于java的微信小程序中国剪纸微信小程序的设计与实现答辩PPT.pptx

    基于java的微信小程序中国剪纸微信小程序的设计与实现答辩PPT.pptx

    VB程序实例-保存窗口设置.zip

    基于VB的程序实例,可供参考学习使用

    基于java的微信小程序微信平台签到系统的设计与实现答辩PPT.pptx

    基于java的微信小程序微信平台签到系统的设计与实现答辩PPT.pptx

    astropy-4.2-cp36-cp36m-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    aggdraw-1.3.14-cp38-cp38-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    兔兔答题源码 在线答题神器 一款前后端开源的移动端答题系统.zip

    依赖包安装 由于node的包非常大,所以提供源代码的时候就不提供第三方的依赖包,需要自己安装。在项目目录下执行npm i即可安装。 1、PHP的版本必须在8.2x,至于更高的版本,例如8.3x版本以及更高,系统还未完全测试过,生产环境不建议直接使用。 2、MySQL的版本必须是>= 5.7.x的版本,低于5.7.0的版本100%是无法使用的。 3、Redis的版本没有过多的要求,不过推荐使用7.0以及更高的版本。 4、管理端使用的Vue3的版本开发,同时使用了Element Plus的版本, 所以需要使用Node.js的版本推荐是>= 16.x的版本。同时推荐生产环境,编译打包成静态文件运行。 安装教程: 域名配置,打开utils目录下的request.js文件,按照文件说明配置实际的API地址。 App.vue里面的examUpdateTemplateId改成自己的微信小程序订阅模板id。 代码中有涉及到开发者的二维码图片,根据不同的地方替换成自己即可。 小程序配置,找到manifest.json文件,将下面的appid改成你自己的小程序appid。 “mp-we

    JSP基于SSM小区物业管理系统毕业源码案例设计.zip

    JSP基于SSM小区物业管理系统毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    VB程序实例-程序菜单的隐藏&显示.zip

    基于VB的程序实例,可供参考学习使用

    基于Java实现的黄金矿工小游戏.zip

    本资源是一个基于Java实现的黄金矿工小游戏项目,旨在帮助初学者通过实践巩固Java编程知识。游戏包含多个功能模块,如窗口绘制、图片绘制、红线摇摆及抓取判定等,并采用双缓存技术解决画面闪动问题。此外,还实现了金块和石块的随机生成与抓取机制、积分设置、关卡设置以及商店购物等功能。本项目适合刚入门或有一定基础的Java学习者,通过完成这个项目,可以提升面向对象编程的理解和应用能力,同时增强对Java基础知识的掌握。

    盒子模型及盒子布局中的

    清除默认样式

    基于java的社区文化宣传网站答辩PPT.pptx

    基于java的社区文化宣传网站答辩PPT.pptx

    Trustwave DbProtect:高级查询与自定义报告技术教程.docx

    Trustwave DbProtect:高级查询与自定义报告技术教程.docx

    原版apsw-3.46.1.0-cp312-cp312-win_arm64.whl-下载即用直接pip安装.zip

    安装前的准备 1、安装Python:确保你的计算机上已经安装了Python。你可以在命令行中输入python --version或python3 --version来检查是否已安装以及安装的版本。 个人建议:在anaconda中自建不同python版本的环境,方法如下(其他版本照葫芦画瓢): 比如创建python3.8环境,anaconda命令终端输入:conda create -n py38 python==3.8 2、安装pip:pip是Python的包管理工具,用于安装和管理Python包。你可以通过输入pip --version或pip3 --version来检查pip是否已安装。 安装WHL安装包 1、打开命令行(或打开anaconda命令行终端): 在Windows上,你可以搜索“cmd”或“命令提示符”并打开它。 在macOS或Linux上,你可以打开“终端”。 2、cd到whl文件所在目录安装: 使用cd命令导航到你下载的whl文件所在的文件夹。 终端输入:pip install xxx.whl安装即可(xxx.whl指的是csdn下载解压出来的whl) 3、等待安装完成: 命令行会显示安装进度,并在安装完成后返回提示符。 以上是简单安装介绍,小白也能会,简单好用,从此再也不怕下载安装超时问题。 使用过程遇到问题可以私信,我可以帮你解决! 收起

    使用Java开发的一个小的飞机大战游戏.zip

    资源简介本资源是一个使用Java语言开发的小型飞机大战游戏,旨在为学习者提供一个完整的游戏开发案例。项目包含全部源代码及相关资源文件,适合初学者和有经验的开发者学习和参考。通过本项目,学习者可以深入了解Java编程、面向对象设计、图形渲染及事件处理等核心概念,并掌握游戏开发的基本技巧。该项目涵盖了从游戏设计到实现的全过程,包括游戏窗口创建、游戏元素(如飞机、子弹、敌机)的设计、碰撞检测、计分系统以及用户交互等功能。通过分析和研究这些代码,学习者不仅可以提升编程技能,还能理解游戏开发的基本原理和流程。总之,这个基于Java的飞机大战游戏项目是一个宝贵的学习资源,能够帮助学习者在实践中掌握Java编程和游戏开发的核心知识。

Global site tag (gtag.js) - Google Analytics