使用Camel在Amazon上构建分布式工作流应用程序
帶有SNS-SQS的管道
工作流由按動態(tài)條件確定的特定順序執(zhí)行的獨立任務(wù)組成。 工作流通常代表業(yè)務(wù)流程,例如電子商務(wù)商店中的訂單處理步驟。 Amazon Web Services提供了各種工具來構(gòu)建分布式和可擴展的工作流應(yīng)用程序。 構(gòu)建此類應(yīng)用程序的一種方法是使用主題和隊列來連接工作流程中的不同步驟。 然后,我們可以使用發(fā)布/訂閱,競爭的使用者和其他機制來擴展我們的應(yīng)用程序,甚至最簡單的應(yīng)用程序都將具有類似于以下內(nèi)容的形狀:
流水線的每個步驟都通過隊列連接到下一個步驟,并且每個步驟執(zhí)行一些操作并決定下一步是什么。 此外,使用SNS / SQS還涉及其他一些底層任務(wù): –序列化/反序列化數(shù)據(jù) –確保SQSmessages的一致性(FIFO順序) –確保不超過消息大小 –發(fā)明某種審計支持 –訂戶排隊到主題,分配權(quán)限 –管理DLQ 最后,它可以工作,但是克服這些技術(shù)挑戰(zhàn)所需的時間與編寫可提供業(yè)務(wù)價值的實際代碼所花費的時間一樣多。
簡單的工作流程服務(wù)
另一方面,SWF提供了用于編寫分布式異步工作流應(yīng)用程序的更高級別的API。 它會自動對數(shù)據(jù)進行序列化/反序列化,管理應(yīng)用程序狀態(tài),提供可審核性,確保強一致性,支持多個版本。 最重要的是,它確保工作流程編排和業(yè)務(wù)邏輯執(zhí)行分開。 任何典型的SWF應(yīng)用程序都具有以下構(gòu)造塊:
用SWF術(shù)語來說,工作流是實際的模板,描述了流程應(yīng)遵循的不同步驟。 而工作流執(zhí)行就是該模板的運行。 Starter –可以啟動,停止和與工作流執(zhí)行交互的過程。 決策者 –協(xié)調(diào)和決定工作流程執(zhí)行下一步的過程。 工作者 –執(zhí)行特定類型任務(wù)的過程。 SWF控制臺 –提供完整的可見性和執(zhí)行控制權(quán)。 工作流執(zhí)行示例可以通過以下步驟進行:啟動程序啟動工作流執(zhí)行,SWF接收該工作流,詢問決策者下一步是什么,然后根據(jù)該決定將任務(wù)傳遞給適當(dāng)?shù)幕顒庸ぷ髡摺?一旦收到了來自活動工作人員的結(jié)果,SWF就會再次向決策者詢問下一步,并且取決于響應(yīng)是否可以執(zhí)行其他工作人員。 該流程一直持續(xù)到?jīng)Q策者答復(fù)工作流程完成為止。 您可以看到?jīng)Q策者如何協(xié)調(diào)工作流的每個步驟以及活動工作人員如何執(zhí)行各個任務(wù)。 所有這些都由SWF管理,并且可以在任何階段進行審核。
為什么要使用駱駝?
亞馬遜提供的Java客戶端通過使用注釋生成代理類來訪問SWF服務(wù)來工作。 生成和使用代理類以及從啟動器到?jīng)Q策器以及從決策器到活動工作者的依賴關(guān)系的整個過程并不是很愉快。 還有什么比使用駱駝路線進行編排和使用另一條路線進行實際活動更好的呢? 結(jié)果是現(xiàn)在在Camel master中的Camel SWF組件。 Camel-swf組件具有兩種類型的端點: 工作流和活動 。 工作流生產(chǎn)者允許我們啟動,終止,取消,發(fā)信號,獲取狀態(tài)或檢索工作流執(zhí)行的整個執(zhí)行歷史。 在我們的圖中,它表示啟動器。 這是如何開始執(zhí)行工作流程的示例:
工作流使用者是決定者。 它從SWF服務(wù)接收決策任務(wù),并計劃執(zhí)行活動任務(wù)或指示工作流執(zhí)行已完成。 這是一條無狀態(tài)的確定性路線,只有工作才能安排任務(wù):
from("aws-swf://workflow?domainName=demo&workflowList=demo-flow&version=1.0&eventName=processWorkflows").log("Received a workflow task ${body}").filter(header(SWFConstants.ACTION).isEqualTo(SWFConstants.EXECUTE_ACTION)).to("aws-swf://activity?domainName=demo&activityList=demo-activity&version=1.0&eventName=processActivities");活動端點允許我們與活動任務(wù)進行交互。 活動生產(chǎn)者用于安排活動任務(wù),并且只能在決策者路線(實際上是決策者線程)中使用。 這是因為只有決策者才能安排活動任務(wù)。 我們圖中必須提供實現(xiàn)的最后一個框是活動工作程序,可以使用活動使用者來創(chuàng)建活動工作程序。 該端點將從SWF接收活動任務(wù),執(zhí)行任務(wù)并將結(jié)果返回給SWF。 這是實際執(zhí)行業(yè)務(wù)邏輯的部分:
from("aws-swf://activity?domainName=demo&activityList=demo-activity&version=1.0&eventName=processActivities").log("Received Activity task ${body}").setBody(constant("1")); 因此,任何SWF應(yīng)用程序都由啟動執(zhí)行程序的啟動程序(工作流生產(chǎn)者),接收決策任務(wù)并計劃活動任務(wù)的決策者(工作消費者)(使用活動生產(chǎn)者)和執(zhí)行任務(wù)的活動工作者(活動消費者)組成。 這些端點之間的通信是異步的,一致的,并且由SWF服務(wù)進行管理。
它不是最容易使用的組件,但是它具有簡單且可擴展的體系結(jié)構(gòu)。 PS:感謝我的前經(jīng)理S. Wheeler讓我將此組件貢獻給Camel社區(qū)。
翻譯自: https://www.javacodegeeks.com/2013/12/building-distributed-workflow-applications-on-amazon-with-camel.html
總結(jié)
以上是生活随笔為你收集整理的使用Camel在Amazon上构建分布式工作流应用程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库更改到Java环境中实现可持续和平
- 下一篇: Spotify 正测试将歌词作为 Pre