日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 perl大骆驼和小骆驼_从代码内部:骆驼路由引擎第一部分 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

perl大駱駝和小駱駝

因此,最近我重新燃起了對Apache Camel的工作方式的興趣。 Camel是一種功能強(qiáng)大的集成工具,使用非常廣泛,但是只要我將其投入使用,我都會忍不住想“好吧,這到底是怎么做的!” …我只是有一個(gè)訣竅,就是不僅僅接受它的美妙。我想知道為什么。

如果您過去一直關(guān)注我的一些文章,您會記得我確實(shí)有一篇博客文章,深入探討了Camel DSL API的工作原理 。 更具體地說,您如何神奇地鍵入“ from(..)”,“ choice(..)”,“ simple(..)”等,并且DSL足夠聰明,足以知道您的意思以及如何將所有內(nèi)容串在一起。 如果您對所有工作方式都感興趣,請?jiān)谠撀毼簧习l(fā)揮最大作用。 請注意,其中有一些冗長而冗長的UML類圖。

因此,如果您回想起以前的文章,則DSL(無論是Java DSL,XML還是Scala或任何其他)都具有非常特殊的作用。 它可以幫助集成路線的作者非常清楚地表達(dá)自己的意圖,然后將其構(gòu)建為稱為RouteDefinition的抽象。 RouteDefinition是您路線的“藍(lán)圖”,并且了解您所有的處理器 , EIP和組件 。 您可以考慮從(..)調(diào)用的任何時(shí)間是新RouteDefinition的開始。 其余路線賦予其形狀。 因此,對于每個(gè)from(..),都有一個(gè)到RouteDefinition的一對一映射。

因此,當(dāng)CamelContext啟動時(shí),它會收集所有RouteDefinition并開始從它們中構(gòu)建一條路由。 看一下DefaultCamelContext#doStartCamel作為所有這些的入口點(diǎn)。 除其他重要事項(xiàng)外,例如將注冊表,端點(diǎn),啟動基本服務(wù),管理等放在一起,您將看到對DefaultCamelContext#startRouteDefinitions的調(diào)用。 這告訴RouteDefinitions構(gòu)建Route對象,即路由交換的實(shí)際使用者(輸入)+處理器(輸出)的管道 。

下一個(gè)方框?qū)⒃敿?xì)介紹這一切的工作原理。 就像以前有關(guān)Camel內(nèi)部工作的博客文章一樣,這個(gè)細(xì)節(jié)主要是給我的:即,在將來我忘掉其中一半的時(shí)候,我想復(fù)習(xí)一下。 一些想為駱駝做貢獻(xiàn)的人可能會發(fā)現(xiàn)這很有趣。 對于其他所有人。.隨時(shí)跳過此塊。

–開始詳細(xì)部分–

DefaultCamelContext將遍歷每個(gè)RouteDefinition ,并將嘗試構(gòu)建Route S和RouteContext S的列表。

快速繞道:

什么是RouteContext ? 簡單來說,您可以將其視為Route的大腦,以及路由特定配置所處的地方(流緩存,跟蹤,處理故障等)。 它了解“來自”消費(fèi)者,管道的其余部分,攔截策略,路由策略,并能夠構(gòu)造將在交換機(jī)上運(yùn)行的Route。

這可能會造成混淆,因?yàn)樵趯?shí)際上它們正在構(gòu)建RouteContext和構(gòu)建Route時(shí),有許多名為“ addRoutes()”的方法的調(diào)用。 但是,將其放在一邊。 因此,對RouteDefinition#addRoutes(..)的調(diào)用將返回RouteContext對象的列表。 它還將填充(最初為空)路由的列表。 這里的重?cái)?shù)基本上是n到n。 因?yàn)槟梢跃哂蠷outeDefinition的多個(gè)輸入 (例如,通過將多個(gè)from(..)。from(..)串在一起),所以可以預(yù)期到路由的單個(gè)1-to-1 RouteContext,以及一對PER from( )。 因此,在前面的示例中,列表中將有兩個(gè)RouteContext和兩個(gè)Route。 在對addRoutes(..)的調(diào)用中,它還會嘗試將輸出定義轉(zhuǎn)換為真實(shí)的Processors。 處理器是Route對象的基礎(chǔ)。 每個(gè)處理器都是基于其各自的定義(例如ChoiceDefinition,LogDefinition)構(gòu)建的,但最終被包裝在Channel對象中并添加到RouteContext中。

因此,總結(jié)一下, RouteDefinition將創(chuàng)建Route,RouteContext,并將各個(gè)輸出定義轉(zhuǎn)換為Processors。 創(chuàng)建這些路由后,將根據(jù)新創(chuàng)建的Route + RouteContext對創(chuàng)建一個(gè)RouteService ,并使用CamelContext建立該路由服務(wù),以便以后啟動和控制路由的生命周期。

–結(jié)束詳細(xì)部分–

因此,…一旦初始化了RouteService ,就需要啟動路由,這取決于它們是否自動啟動以及它們的順序。 再次看一下DefaultCamelContext#doStartCamel ,對底部的是對DefaultCamelContext#doStartOrResumeRoutes的調(diào)用。 這將循環(huán)遍歷我們的RouteService S,并為路線確定正確的啟動順序,然后啟動它們。

路線分為兩個(gè)階段:

  • 熱身:在熱身階段,我們?yōu)g覽所有路徑并啟動所有“輸出”或處理器/設(shè)備。 駱駝要注意確保
    首先發(fā)生這種情況是因?yàn)槲覀儾幌M谒小拜敵觥笨捎弥熬蛦印拜斎搿被蚴褂梅健?
  • 啟動/恢復(fù):啟動使用者! 這是特定于端點(diǎn)/組件的。 例如,JMS使用者將開始偵聽目的地。

請注意,在生命周期的這些階段的所有階段,都有可以調(diào)用的回調(diào),以便您可以插入此生命周期并添加自己的自定義啟動代碼以與您的應(yīng)用程序協(xié)調(diào)。 查看一下Camel API,了解可用的回調(diào)類型LifecylceStrategy

那里有。 這是將路由定義轉(zhuǎn)換為實(shí)際路由然后啟動的方式。

在第二部分中,我希望探討如何將處理器鏈接在一起,包括使用AsyncProcessor進(jìn)行更高級的鏈接。

參考:在Christian Posta – Software Blog博客上,使用我們的JCG合作伙伴 Christian Posta 使用k最近鄰+遺傳算法創(chuàng)建價(jià)格模型 。

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

perl大駱駝和小駱駝

總結(jié)

以上是生活随笔為你收集整理的perl大骆驼和小骆驼_从代码内部:骆驼路由引擎第一部分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。