7 Akka中Router路由機制

2021-10-16 14:29:16 字數 2505 閱讀 6085

在akka中,router 也是一種 actor 型別,是負責負載均衡和路由的抽象,把訊息按照路由規則排程,分配給routee去運算,用於排程actor任務或進行負載均衡策略

它路由到來的訊息到其他的actors,其他那些actors就叫做routees(被路由物件)。

有兩種方式來建立router

actor group:routees由外界其它actor產生(自行建立,自行管理),特點是能實現靈活的routee構建和監控。

list

routees =

newarraylist

<

>()

;for

(int i =

0; i <

5; i++

)router router =

newrouter

(new

roundrobinroutinglogic()

, routees)

;

actor pool:由router負責構建所有的routee,routee作為子actor,並在該子actor終止時將它從router中移除。

actorsystem actorsystem = actorsystem.

create

("lpsys");

actorref routeractorref = actorsystem.

actorof

( props.

create

(articleparseactor.

class).

withrouter

(new

roundrobinpool(8

)),//roundrobinpool:表示依次往復迴圈傳送

"lprouteractor"

);

在前面我們使用了 roundrobinpool/roundrobingroup, 用於指定 router 將訊息傳送給各 actor 的順序。akka 內建了一些路由策略:

路由策略

功能round robin

依次向 pool/group 中的各個節點傳送訊息,迴圈往復。random——隨機向各個節點傳送訊息。

smallest mailbox

向當前包含訊息數量最少的 actor 傳送訊息。由於遠端 actor 的郵箱大小未知,因此假設它們的佇列中已經有訊息在排隊。所以會優先將訊息傳送給空閒的本地 actor。

scatter gather

向 group/pool 中的所有 actor 都傳送訊息,使用接收到的第乙個響應,丟棄之後收到的任何其他響應。如果需要確保能夠盡快收到乙個響應,那麼可以使用 scatter/gather。

tail chopping

和scatter/gather類似, 但是router並不是一次性向 group/pool中的所有 actor 都傳送一條訊息,而是每向乙個 actor 傳送訊息後等待一小段時間。有著和scatter/gather 類似的優點,但是相較而言有可能可以減少網路負載。

consistent hashing

給 router 提供乙個 key,router 根據這個 key 生成雜湊值。使用這個雜湊值來決定給哪個節點傳送資料。想要將特定的資料傳送到特定的目標位置時,就可以使用雜湊。在下章中,我們將討論更多有關一致性雜湊的問題。

balancingpool

balancingpool 這個路由策略有點特殊。只可以用於本地 actor。多個 actor 共享同乙個郵箱,一有空閒就處理郵箱中的任務。這種策略可以確保所有actor 都處於繁忙狀態。對於本地集群來說,經常會優先選擇這個路由策略。

router.tell(

new akka.routing.broadcast(msg)

);

如果使用 pool 的方式建立 router,由 router 負責建立 actor,那麼這些路由物件會成為 router 的子節點。建立 router 時,可以給 router 提供乙個自定義的監督策略,呼叫 withsupervisorstrategy 方法指定 router 對 pool 中路由物件的監督策略。

VUE中的路由router

vue router是vue.js官方的路由外掛程式,它和vue.js是深度整合的,適合用於構建單頁面應用。vue的單頁面應用是基於路由和元件的,路由用於設定訪問路徑,並將路徑和元件對映起來。傳統的頁面應用,是用一些超連結來實現頁面切換和跳轉的。在vue router單頁面應用中,則是路徑之間的切換...

在Win7 Hyper v虛擬機器中掛接真實機的音效卡

最近在測試lync的語音功能,環境已在虛擬機器中搭建好,但hyper v中不支援音效卡,一直未測試成功,經過一番嘗試後終於成功,細節如下 2.真機中mstsc的設定如下 新增乙個dword值如下圖 4.遠端連線後出現的錄音裝置 5.在虛擬中用lync呼叫 如果你按照上面的設定還是不行 請參照如下設定...

centos7 kvm虛擬機器中開啟虛擬機器

1 檢視當前宿主機系統中是否支援。cat sys module kvm intel parameters nested y 結果為y表示當前的作業系統已經支援了巢狀虛擬化,使用跑虛擬化的程式直接使用就ok了 n 那當然就表示當前作業系統未配置巢狀虛擬化嘍2 如果你的結果為n,看下配置過程吧 vi e...