
許多大型公司都使用Akka解決實際問題。 Akka旨在向多個方向恐嚇并提供極大的靈活性。 Akka的目標之一是“管理系統過載”。
Akka使用Actors:“ Akka的代碼組織單位”。 根據巴生的說法,“ Actor可幫助您創建并發,可伸縮和容錯的應用程序。” 行為者“保持許多與業務邏輯分離的”政策決策”。 演員起源于1970年代(“就像計算機科學中所有很酷的東西一樣”),而Erlang多年來一直在使用具有“巨大成功”的演員。
巴生警告說,避免“以共享狀態來思考,即泄漏的抽象”。 他補充說,線程和鎖是“一種執行手段”,而不是結構化的手段。 他說,這將執行與業務邏輯混合在一起。 并發收集是針對本地使用的良好優化。
演員是“按設計分配的”,而巴生有一張幻燈片,列出了幾個解釋該聲明的項目符號。 他指出,參與者可以替代“線程”,“對象實例”,“回調或偵聽器”,“單例或服務”,“路由器,負載均衡器或池”,“ Java EE”。會話Bean或消息驅動Bean,“進程外服務”和“有限狀態機”。
巴生引用了卡爾?休伊特關于演員的錄像帶 。 演員是“體現了幾個關鍵特征的基本計算單位”。
巴生在演示中以我喜歡的格式顯示了代碼示例:嵌入到他的幻燈片中并突出顯示了顏色語法。 他顯示了步驟0(“定義”),其中他的代碼定義了Actor的類和Actor的行為。
定義后,第一個操作(I –“創建”)“創建Actor的新實例”。 所創建的Actor非常輕巧,其“狀態和行為彼此無法區分”。 他把最后一點講到了:“觀察狀態的唯一方法是通過向演員發送消息并查看演員的反應。” Actor是狀態,行為和消息隊列的“非常強大的封裝”。
Akka提供了一個ActorSystem
來創建Akka Actor實例。 實例Props
,因為演員需要道具提供給演員。
第2步(“發送”)涉及“向演員發送消息”和“一切都以反應方式發生”和“一切都是異步且無鎖的”。 Akka通過演員的tell
方法支持“即發即棄”模式。 但是,Akka提供有保證的交貨順序。 回復是在Akka中使用getSender().tell()
。
第3步(“成為”)“重新定義了演員的行為”,并且“通過接收消息做出反應”。 人們可能想在運行時更改actor行為的原因包括支持將競爭激烈的actor轉換為actor池或實現正常降級。
演員可以監督其他演員,進入步驟4(“ SUPERVISE”)。 “保護者檢測并響應其監督的Actor的故障”,巴生表示這轉化為“干凈的分離,處理和錯誤處理”。
Klang談到了“ Java,C和C#中的故障管理”,在這里您“被賦予了單一的控制線程”。 他以這種方式將其放在子彈中:“如果這根線炸毀,您就被擰死了。” 這意味著所有“顯式錯誤處理”都在“單線程內”完成,并與業務代碼“糾纏”在一起。
巴生表示,處理錯誤處理的方法是將錯誤處理推離業務邏輯。 然后,他引用了洋蔥層錯誤內核 。 巴生談到了為Actor處理失敗提供的回調( preRestart
和postRestart
)。
路由器是Actor的特例。 巴生使用RoundRobinRouter
顯示了一張帶有代碼的RoundRobinRouter
。 他還展示了能夠在配置文件中的代碼之外定義部署方案,并使用路徑從代碼中引用該方案。 他進一步舉例說明了“遠程部署”的代碼,該代碼指定了帶有“ akka”協議,主機名和端口的URL。
到目前為止,巴生提出的所有內容都可以作為Akka 2.0使用。 巴生表示,即將發布的Akka 2.1中將會有Akka集群。 他要求提供反饋,以確保Akka 2.2中的群集可以使用正確的API和正確的功能。 規范 ,用戶指南和代碼本身提供了有關Akka群集的更多信息。
Akka 2.1還具有基于Apache Camel的 Akka Camel 。 Typesafe控制臺也可用于監視Akka應用程序,并且有此應用程序的實時演示 。
參考: JavaOne 2012:向上,向上和向外:來自JCG合作伙伴 Dustin Marx的Akka與Akka一起擴展軟件 ,該文件來自Inspired by Actual Events博客。
翻譯自: https://www.javacodegeeks.com/2012/10/javaone-2012-up-up-and-out-scaling.html