【Java】AKKA文檔(java版)—角色的引用、路徑和地址

2.5 角色的引用、路徑和地址java

這一章描述,角色在一個有多是分佈式的角色系統中是如何被識別和定位的。它關係到了角色系統造成的內在監管層級以及角色跨越多個網絡節點之間通訊的位置透明化。

上述圖片顯示了角色系統中幾個最重要實體之間的關係,請仔細閱讀。網絡

 

2.5.1什麼是一個角色引用?分佈式

一個角色引用是ActorRef的一個子類型,它的主要目的是爲它所表明的角色提供發送消息的功能。每一個角色能夠經過self字段訪問本身指定(本地)的引用,這個引用包括髮送者引用,默認會發送全部消息給別的角色。相反的,在消息處理期間,這個角色能夠訪問發送者引用,經過sender方法來呈現當前的消息。工具

這裏提供了幾個基於角色系統配置的不一樣類型的角色引用:日誌

  1. 角色系統中的純本地引用被配置成不支持網絡功能的,這些角色引用發送的消息不能經過一個網絡發送到另外一個遠程的JVM。
  2. 角色系統中的本地引用在被啓用時,它表明了那些在同一個JVM裏的角色支持網絡功能。爲了發送消息給別的網絡節點,這些引用包含了協議和遠程地址信息。
  3. 這裏有一個用於路由器的本地角色引用的子類型(即角色混合了路由器的特性)。它的邏輯結構和上述的本地引用同樣,有一點不一樣的是,向它們發送的消息會被分發給它們的子角色中的一個。
  4. 遠程角色引用表示了哪一個角色能夠經過遠程通訊到達,即發送消息給它們會透明的序列化消息,並把它們發送給遠程的JVM。
  5. 這裏有幾個角色引用的特殊類型,它們表明了角色引用的全部實用目的:
  • PromiseActorRef是Promise的一個特殊表明,它被用於完成一個角色的響應。akka.pattern.ask建立這個角色引用。
  • DeadLetterActorRef是死亡信件服務的默認實現,定義那些Akka路徑中終點是關閉或不存在的消息。
  • EmptyLocalActorRef是Akka查找一個不存在的本地角色路徑時返回的:它等同於DeadLetterRef,不過它保留了它的路徑,這樣Akka能夠經過網絡把它發送出去,而後能夠經過它的路徑和別的已經存在的角色引用進行比較,這樣就能獲得一些已經死亡的角色。
  1. 還有一些你可能還沒見過的一次性的內部實現:
  • 有一個角色引用,它並不呈現爲一個角色,它只做爲一個僞管理員的根部守護者(guardian,下同),咱們稱它爲「行走在時空泡沫中」。
  • 第一個日誌服務開啓以前,事實上激起角色建立的工具是一個僞造的角色引用,它能接收日誌事件並把它們直接打印到標準輸出中,它就是Logging.
  • StandardOutLogger。

閱讀原文請點擊事件

相關文章
相關標籤/搜索