perl大骆驼和小骆驼_从代码内部:骆驼路由引擎第一部分

perl大骆驼和小骆驼

因此,最近我重新燃起了对Apache Camel的工作方式的兴趣。 Camel是一种功能强大的集成工具,使用非常广泛,但是只要我将其投入使用,我都会忍不住想“好吧,这到底是怎么做的!” …我只是有一个诀窍,就是不仅仅接受它的美妙。我想知道为什么。

如果您过去一直关注我的一些文章,您会记得我确实有一篇博客文章,深入探讨了Camel DSL API的工作原理 。 更具体地说,您如何神奇地键入“ from(..)”,“ choice(..)”,“ simple(..)”等,并且DSL足够聪明,足以知道您的意思以及如何将所有内容串在一起。 如果您对所有工作方式都感兴趣,请在该职位上发挥最大作用。 请注意,其中有一些冗长而冗长的UML类图。

因此,如果您回想起以前的文章,则DSL(无论是Java DSL,XML还是Scala或任何其他)都具有非常特殊的作用。 它可以帮助集成路线的作者非常清楚地表达自己的意图,然后将其构建为称为RouteDefinition的抽象。 RouteDefinition是您路线的“蓝图”,并且了解您所有的处理器 , EIP和组件 。 您可以考虑从(..)调用的任何时间是新RouteDefinition的开始。 其余路线赋予其形状。 因此,对于每个from(..),都有一个到RouteDefinition的一对一映射。

因此,当CamelContext启动时,它会收集所有RouteDefinition并开始从它们中构建一条路由。 看一下DefaultCamelContext#doStartCamel作为所有这些的入口点。 除其他重要事项外,例如将注册表,端点,启动基本服务,管理等放在一起,您将看到对DefaultCamelContext#startRouteDefinitions的调用。 这告诉RouteDefinitions构建Route对象,即路由交换的实际使用者(输入)+处理器(输出)的管道 。

下一个方框将详细介绍这一切的工作原理。 就像以前有关Camel内部工作的博客文章一样,这个细节主要是给我的:即,在将来我忘掉其中一半的时候,我想复习一下。 一些想为骆驼做贡献的人可能会发现这很有趣。 对于其他所有人。.随时跳过此块。

–开始详细部分–

DefaultCamelContext将遍历每个RouteDefinition ,并将尝试构建Route S和RouteContext S的列表。

快速绕道:

什么是RouteContext ? 简单来说,您可以将其视为Route的大脑,以及路由特定配置所处的地方(流缓存,跟踪,处理故障等)。 它了解“来自”消费者,管道的其余部分,拦截策略,路由策略,并能够构造将在交换机上运行的Route。

这可能会造成混淆,因为在实际上它们正在构建RouteContext和构建Route时,有许多名为“ addRoutes()”的方法的调用。 但是,将其放在一边。 因此,对RouteDefinition#addRoutes(..)的调用将返回RouteContext对象的列表。 它还将填充(最初为空)路由的列表。 这里的重数基本上是n到n。 因为您可以具有RouteDefinition的多个输入 (例如,通过将多个from(..)。from(..)串在一起),所以可以预期到路由的单个1-to-1 RouteContext,以及一对PER from( )。 因此,在前面的示例中,列表中将有两个RouteContext和两个Route。 在对addRoutes(..)的调用中,它还会尝试将输出定义转换为真实的Processors。 处理器是Route对象的基础。 每个处理器都是基于其各自的定义(例如ChoiceDefinition,LogDefinition)构建的,但最终被包装在Channel对象中并添加到RouteContext中。

序列

因此,总结一下, RouteDefinition将创建Route,RouteContext,并将各个输出定义转换为Processors。 创建这些路由后,将根据新创建的Route + RouteContext对创建一个RouteService ,并使用CamelContext建立该路由服务,以便以后启动和控制路由的生命周期。

–结束详细部分–

块

因此,…一旦初始化了RouteService ,就需要启动路由,这取决于它们是否自动启动以及它们的顺序。 再次看一下DefaultCamelContext#doStartCamel ,对底部的是对DefaultCamelContext#doStartOrResumeRoutes的调用。 这将循环遍历我们的RouteService S,并为路线确定正确的启动顺序,然后启动它们。

路线分为两个阶段:

  • 热身:在热身阶段,我们浏览所有路径并启动所有“输出”或处理器/设备。 骆驼要注意确保
    首先发生这种情况是因为我们不希望在所有“输出”可用之前就启动“输入”或使用方。
  • 启动/恢复:启动使用者! 这是特定于端点/组件的。 例如,JMS使用者将开始侦听目的地。

请注意,在生命周期的这些阶段的所有阶段,都有可以调用的回调,以便您可以插入此生命周期并添加自己的自定义启动代码以与您的应用程序协调。 查看一下Camel API,了解可用的回调类型LifecylceStrategy

那里有。 这是将路由定义转换为实际路由然后启动的方式。

在第二部分中,我希望探讨如何将处理器链接在一起,包括使用AsyncProcessor进行更高级的链接。

参考:在Christian Posta – Software Blog博客上,使用我们的JCG合作伙伴 Christian Posta 使用k最近邻+遗传算法创建价格模型 。

翻译自: https://www.javacodegeeks.com/2013/08/from-inside-the-code-camel-routing-engine-part-i.html

perl大骆驼和小骆驼

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高频小信号谐振放大器设计-课程设计Multisim仿真

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:高频课设 获…

微波技术基础实验二 功分器与定向耦合器设计

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:耦合器 获取…

微波技术基础实验一 滤波器的设计

微信公众号:创享日记 发送:滤波器 获取完整报告工程源文件 一、新建滤波器工程和设计原理图 新建一个workspace,并创建原理图。在图中放置电容、电感并用导线连接。双击电容和电感,设置电容为2pF,电感为1.5nH&#xff…

微波技术大作业课设-分立电容电感+微带单枝短截线+微带双枝短截线

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:微带 获取完…

java 观察者模式示例_Java中的观察者设计模式-示例教程

java 观察者模式示例观察者模式是行为设计模式之一 。 当您对对象的状态感兴趣并希望在发生任何更改时得到通知时,观察者设计模式很有用。 在观察者模式中,监视另一个对象状态的对象称为Observer ,而正在监视的对象称为Subject 。 根据GoF&am…

电磁场与电磁波实验一 熟悉Matlab软件在电磁场领域的应用

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:matlab电磁…

高斯信道下基带模型的多用户BPSK直接序列扩频系统MATLAB仿真(m序列、Gold序列和正交Gold序列)(代码见CSDN同名资源,博客中也有代码)

关注公号【逆向通信猿】更精彩!!! 一、伪随机序列PN码的生成 伪随机序列有很多种,如m序列、Gold序列和正交Gold序列,其中m序列的构造及MATLAB生成方法见: 线性移位寄存器序列(m序列)之MATLAB实现 m序列虽然性能优良,但同样长度的m序列个数不多,且m序列之间的互相…

信号处理系统综合设计-求解器函数的设计(连续和离散时间系统)

微信公众号:创享日记 发送:求解器 获取完整报告(含源程序代码结果分析) 一、在s域分析连续时间系统的方法 一个线性时不变连续时间系统可以用线性常系数微分方程描述,对系统的时域分析可归结为利用数学方法对该方程求解…

OFFICE2019精简安装D盘(包括Word、PPT、Excel,可根据需要调整)+VISIO2019+Mathtype7.4.0完美下载安装教程

经过笔者测试,64位的OFFICE2019、VISIO2019对MathType兼容性很差,时不时出现问题,且网上能查阅到的解决办法均不能很好地解决。 无奈之下换回32位的OFFICE2019,配合MathType7.4.0,简直完美,现将OFFICE 201…

仿知乎论坛社区社交微信小程序

微信公众号:创享日记 发送:仿知乎 获取完整源码(静态数据),导入微信开发者工具即可 说明:源码主要是前端,后端可自行开发 1、首页 问题列表 话题列表 触底加载刷新 2、问题列表及回答 3、发现…

商城小程序项目完整源码(微信小程序)

微信公众号:创享日记 发送:碰撞商城 获取完整源码详细注释(打开微信开发工具导入即可) 1、首页 ①搜索框可以点击搜索 ②轮播图可以点击跳转 ③功能模块可以自行开发 2、搜索 输入关键词会有推荐列表 UI可以自行设计得更漂亮 3、…

java 设计模式 示例_Java中的访问者设计模式–示例教程

java 设计模式 示例访客模式是行为设计模式之一 。 当我们必须对一组相似类型的对象执行操作时,将使用访问者模式。 借助访问者模式,我们可以将操作逻辑从对象移动到另一个类。 例如,假设有一个购物车,我们可以在其中添加不同类型…

电商商城小程序项目完整源码(微信小程序)

微信公众号:创享日记 发送:简商城 获取完整源码(导入微信开发者工具即可) 如果要较完整学习微信小程序云开发可以看看这个“云公开课”帮你了解完整的微信云托管部署流程,学习实战级的小程序开发。 1、首页 点击轮播图…

汉字查拼音微信小程序项目源码

微信公众号:创享日记 发送:查拼音 获取完整源码(微信开发者工具导入即可用) ①基本包括全部汉字 ②支持多音字 "治":["zh","ch"],"沺":["tin"],"油":["yu"…

高斯信道、单径Rayleigh信道和多径衰落信道下基带模型的多用户BFSK直接序列扩频系统MATLAB仿真(m序列、Gold序列和正交Gold序列)

结果预览 高斯 BFSK调制方式在采用m序列时,在高斯信道下的性能仿真结果如下: BFSK调制方式在采用正交Gold序列时,在高斯信道下的性能仿真结果如下: 单径Rayleigh 采用m序列时,在单径Rayleigh信道下的性能仿真结果如下:

随机抽奖转盘微信小程序项目源码

微信小程序:创享日记 发送:抽奖转盘 获取完整源码(微信开发者工具打开即可用) 可以容易自行修改,融入自己的项目里面。 function formatTime(date) {var year date.getFullYear()var month date.getMonth() 1var d…

简易计算器微信小程序项目源码

微信公众号:创享日记 发送:计算器 获取完整源码(微信开发者工具导入即可用) 以下可以忽略不看! 微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用…

MongoDB初学者教程

1. MongoDB简介 在本文中,我们提供了全面的MongoDB教程,该教程与基于Java的应用程序集成。 每当我们读到NoSQL数据库时,我们都需要知道为什么在SQL数据库运行良好时会开发它们。 NoSQL的基础是通过宽松的ACID (原子性,…

手势密码解锁微信小程序项目源码

微信公众号:创享日记 发送:手势密码 获取完整源码(导入微信开发者工具即可用) 以下可以忽略不看! 手势密码就是在手机触屏上设置一笔连成的九宫格图案,登录时画一下设定的图形。 运行程序,发…

带你一步一步实战分析缓冲区溢出漏洞攻击

关注公众号有惊喜【部分付费文章免费阅读,持续更新中…】 点击公众号底部【逆向杂记】可见 文件1 (A)描述此二进制文件提供的服务,不需要运行二进制文件来找出这一点。 (B)有可能对此二进制文件进行缓冲区溢出攻击,它在哪里?哪些…