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