Akka 2.5.11 Cluster Client 集群客戶端

ClusterClient是一個(gè)集群客戶端,主要用于集群外部系統(tǒng)與集群通信,只需要知道一個(gè)集群中的節(jié)點(diǎn)作為初始的聯(lián)絡(luò)點(diǎn)。就可將這個(gè)節(jié)點(diǎn)注冊(cè)為該集群的接待員(receptionist? actor),通過這個(gè)接待員我們就可以在外部系統(tǒng)建立通信了。ClusterClient會(huì)監(jiān)視與接待員的連接,如果連接故障了,它會(huì)建立一條新的連接。當(dāng)查找一個(gè)新的接待員時(shí),它會(huì)從之前的建立的節(jié)點(diǎn)中獲取新的聯(lián)絡(luò)點(diǎn),或者周期性的刷新聯(lián)絡(luò)點(diǎn)。所以聯(lián)絡(luò)點(diǎn)不一定是初始聯(lián)絡(luò)點(diǎn)。

當(dāng)你使用集群客戶端時(shí),必須要更改akka.actor.provider,將local改為remotecluster。

? ? 接待員在集群中所有的節(jié)點(diǎn)上啟動(dòng)。接待員可以是?ClusterReceptionist?擴(kuò)展的也可以是一個(gè)普通的actor 。

集群中的actor需要在mediator中注冊(cè),然后Cluster Client就可以通過 集群中的接待員 來訪問mediator的注冊(cè)表中的任何actor。

在Cluster Client中也有一個(gè)集群客戶端接待員ClusterClientReceptionist? 將客戶端能訪問到的節(jié)點(diǎn)注冊(cè)到列表中。就像mediator一樣?ClusterClient?和?ClusterClientReceptionist?之間發(fā)送的事件可以訂閱。? ? 訂閱發(fā)送消息的類型有三種

①.ClusterClient.Send?

將消息發(fā)送至任意一節(jié)點(diǎn)

②.ClusterClient.SendToAll

消息將會(huì)發(fā)給集群中的所有匹配path的節(jié)點(diǎn)

③.ClusterClient.Publish

將消息發(fā)送給訂閱了某個(gè)主題的所有actor


接待員打開專門的通道讓目標(biāo)actor的響應(yīng)消息發(fā)送到客戶端。可以避免其他集群中的節(jié)點(diǎn)干擾

因?yàn)榭蛻舳送ǔ?yīng)該通過ClusterClient發(fā)送后續(xù)消息。如果客戶端直接聯(lián)系集群中的actor,那actor的回復(fù)可以發(fā)送到原始發(fā)送方。

消息緩沖:當(dāng)向新接待員建立連接時(shí),ClusterClient會(huì)緩沖消息,等連接建立完成后再發(fā)送消息。如果緩存滿了ClusterClient會(huì)將舊的消息拋棄。可以通過配置來改變緩沖區(qū)的大小,0代表禁用。(具體配置見下文- 配置)

防止消息丟失:為了防止消息丟失客戶端actor和目標(biāo)actor之間也要保證?at-least-once message delivery(至少一次通信)。

一個(gè)集群客戶端示例:

?首先在集群中的節(jié)點(diǎn)啟動(dòng)接待員,配置擴(kuò)展屬性。

akka.extensions = ["akka.cluster.client.ClusterClientReceptionist"]

ClusterClientReceptionist?使用?DistributedPubSub擴(kuò)展)

然后在ClusterClientReceptionist中注冊(cè)客戶端可用的actor

在客戶端,創(chuàng)建ClusterClient actor 并向集群中的某個(gè)地方發(fā)送識(shí)別消息。

上面代碼中initialContacts參數(shù)是Set[ActorPath],可以這樣配置


事件

上文說道ClusterClient?和?ClusterClientReceptionist?之間發(fā)送的事件可以訂閱,因此有一個(gè)actor來接收(contact points)可用接待員的地址。

同樣地,我們還要?jiǎng)?chuàng)建一個(gè)actor來接收與ClusterClientReceptionist連接的cluster client

依賴

使用Cluster Client要添加以下依賴

"com.typesafe.akka" %% "akka-cluster-tools" % "2.5.11"

配置

配置?ClusterClientReceptionist擴(kuò)展


配置ClusterClient

配置中看到當(dāng)集群客戶端啟動(dòng)時(shí),必須提供一個(gè)初始聯(lián)系列表,該列表是接待員正在運(yùn)行的集群節(jié)點(diǎn)。然后,它會(huì)重復(fù)地嘗試聯(lián)系那些直到它與其中一個(gè)的聯(lián)系成功。(上文配置中establishing-get-contacts-interval)。?在運(yùn)行時(shí),通過來自Receptionist的數(shù)據(jù)聯(lián)系列表會(huì)不斷地更新。(上文配置中 refresh-contacts-interval )

當(dāng)客戶端正在運(yùn)行時(shí),它會(huì)檢測(cè)到與receptionist?的連接失敗,如果超過了可配置的心跳次數(shù),客戶將嘗試重新連接到它已知的聯(lián)系列表,以找到它可以訪問的接待員。

reconnect-timeout配置時(shí)間間隔,在超過規(guī)定時(shí)間間隔中客戶端找到一個(gè)receptionist?連接到集群時(shí),cluster client將被停止。在新地址上重新啟動(dòng),然后通過訪問某種服務(wù)注冊(cè)中心來更新一組初始聯(lián)系人,從而啟動(dòng)一個(gè)新的集群客戶端。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,837評(píng)論 18 139
  • 持久化 當(dāng)我們?cè)诩合到y(tǒng)中,一臺(tái)機(jī)器向另一臺(tái)機(jī)器發(fā)送一段數(shù)據(jù),負(fù)責(zé)接收的機(jī)器在接收數(shù)據(jù)前突然宕機(jī),就會(huì)造成數(shù)據(jù)丟失...
    mango_knight閱讀 4,569評(píng)論 0 4
  • Actor系統(tǒng)的實(shí)體 在Actor系統(tǒng)中,actor之間具有樹形的監(jiān)管結(jié)構(gòu),并且actor可以跨多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)進(jìn)行透...
    JasonDing閱讀 3,354評(píng)論 2 6
  • from http://www.infoq.com/cn/articles/etcd-interpretation...
    小樹苗苗閱讀 13,983評(píng)論 3 38