perl大骆驼和小骆驼_从代码内部:骆驼路由引擎第一部分
perl大駱駝和小駱駝
因此,最近我重新燃起了對Apache Camel的工作方式的興趣。 Camel是一種功能強大的集成工具,使用非常廣泛,但是只要我將其投入使用,我都會忍不住想“好吧,這到底是怎么做的!” …我只是有一個訣竅,就是不僅僅接受它的美妙。我想知道為什么。
如果您過去一直關(guān)注我的一些文章,您會記得我確實有一篇博客文章,深入探討了Camel DSL API的工作原理 。 更具體地說,您如何神奇地鍵入“ from(..)”,“ choice(..)”,“ simple(..)”等,并且DSL足夠聰明,足以知道您的意思以及如何將所有內(nèi)容串在一起。 如果您對所有工作方式都感興趣,請在該職位上發(fā)揮最大作用。 請注意,其中有一些冗長而冗長的UML類圖。
因此,如果您回想起以前的文章,則DSL(無論是Java DSL,XML還是Scala或任何其他)都具有非常特殊的作用。 它可以幫助集成路線的作者非常清楚地表達自己的意圖,然后將其構(gòu)建為稱為RouteDefinition的抽象。 RouteDefinition是您路線的“藍圖”,并且了解您所有的處理器 , EIP和組件 。 您可以考慮從(..)調(diào)用的任何時間是新RouteDefinition的開始。 其余路線賦予其形狀。 因此,對于每個from(..),都有一個到RouteDefinition的一對一映射。
因此,當CamelContext啟動時,它會收集所有RouteDefinition并開始從它們中構(gòu)建一條路由。 看一下DefaultCamelContext#doStartCamel作為所有這些的入口點。 除其他重要事項外,例如將注冊表,端點,啟動基本服務,管理等放在一起,您將看到對DefaultCamelContext#startRouteDefinitions的調(diào)用。 這告訴RouteDefinitions構(gòu)建Route對象,即路由交換的實際使用者(輸入)+處理器(輸出)的管道 。
下一個方框?qū)⒃敿毥榻B這一切的工作原理。 就像以前有關(guān)Camel內(nèi)部工作的博客文章一樣,這個細節(jié)主要是給我的:即,在將來我忘掉其中一半的時候,我想復習一下。 一些想為駱駝做貢獻的人可能會發(fā)現(xiàn)這很有趣。 對于其他所有人。.隨時跳過此塊。
–開始詳細部分–
DefaultCamelContext將遍歷每個RouteDefinition ,并將嘗試構(gòu)建Route S和RouteContext S的列表。
快速繞道:
什么是RouteContext ? 簡單來說,您可以將其視為Route的大腦,以及路由特定配置所處的地方(流緩存,跟蹤,處理故障等)。 它了解“來自”消費者,管道的其余部分,攔截策略,路由策略,并能夠構(gòu)造將在交換機上運行的Route。
這可能會造成混淆,因為在實際上它們正在構(gòu)建RouteContext和構(gòu)建Route時,有許多名為“ addRoutes()”的方法的調(diào)用。 但是,將其放在一邊。 因此,對RouteDefinition#addRoutes(..)的調(diào)用將返回RouteContext對象的列表。 它還將填充(最初為空)路由的列表。 這里的重數(shù)基本上是n到n。 因為您可以具有RouteDefinition的多個輸入 (例如,通過將多個from(..)。from(..)串在一起),所以可以預期到路由的單個1-to-1 RouteContext,以及一對PER from( )。 因此,在前面的示例中,列表中將有兩個RouteContext和兩個Route。 在對addRoutes(..)的調(diào)用中,它還會嘗試將輸出定義轉(zhuǎn)換為真實的Processors。 處理器是Route對象的基礎(chǔ)。 每個處理器都是基于其各自的定義(例如ChoiceDefinition,LogDefinition)構(gòu)建的,但最終被包裝在Channel對象中并添加到RouteContext中。
因此,總結(jié)一下, RouteDefinition將創(chuàng)建Route,RouteContext,并將各個輸出定義轉(zhuǎn)換為Processors。 創(chuàng)建這些路由后,將根據(jù)新創(chuàng)建的Route + RouteContext對創(chuàng)建一個RouteService ,并使用CamelContext建立該路由服務,以便以后啟動和控制路由的生命周期。
–結(jié)束詳細部分–
因此,…一旦初始化了RouteService ,就需要啟動路由,這取決于它們是否自動啟動以及它們的順序。 再次看一下DefaultCamelContext#doStartCamel ,對底部的是對DefaultCamelContext#doStartOrResumeRoutes的調(diào)用。 這將循環(huán)遍歷我們的RouteService S,并為路線確定正確的啟動順序,然后啟動它們。
路線分為兩個階段:
- 熱身:在熱身階段,我們?yōu)g覽所有路徑并啟動所有“輸出”或處理器/設(shè)備。 駱駝要注意確保
首先發(fā)生這種情況是因為我們不希望在所有“輸出”可用之前就啟動“輸入”或使用方。 - 啟動/恢復:啟動使用者! 這是特定于端點/組件的。 例如,JMS使用者將開始偵聽目的地。
請注意,在生命周期的這些階段的所有階段,都有可以調(diào)用的回調(diào),以便您可以插入此生命周期并添加自己的自定義啟動代碼以與您的應用程序協(xié)調(diào)。 查看一下Camel API,了解可用的回調(diào)類型LifecylceStrategy
那里有。 這是將路由定義轉(zhuǎn)換為實際路由然后啟動的方式。
在第二部分中,我希望探討如何將處理器鏈接在一起,包括使用AsyncProcessor進行更高級的鏈接。
翻譯自: https://www.javacodegeeks.com/2013/08/from-inside-the-code-camel-routing-engine-part-i.html
perl大駱駝和小駱駝
總結(jié)
以上是生活随笔為你收集整理的perl大骆驼和小骆驼_从代码内部:骆驼路由引擎第一部分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓钱咖下载(安卓钱咖)
- 下一篇: linux程序编译(linux 程序编译