在項目中添加如下依賴項:html
介紹:java
讓咱們仔細看看咱們的用例所需的主要功能,在用於監控家庭溫度的完整物聯網系統中,將設備傳感器鏈接到咱們系統的步驟可能以下所示:git
步驟1和2發生在咱們的教程的範圍以外。在本章中,咱們將開始解決步驟3-6,併爲傳感器建立一種方式來註冊咱們的系統並與Actor進行通訊。但首先,咱們還有另外一個架構決策 - 咱們應該使用多少級別的Actor來表明設備組和設備傳感器?程序員
Akka程序員面臨的主要設計挑戰之一是爲Actor選擇最佳粒度。實際上,根據Actor之間交互的特徵,一般有幾種有效的方法來組織系統。例如,在咱們的用例中,可讓一個Actor維護全部組和設備 - 可能使用哈希映射。爲每一個組創建一個跟蹤同一家庭中全部設備狀態的參與者也是合理的。github
如下指南幫助咱們選擇最合適的actor層次結構:安全
設備管理層次結構網絡
考慮到上一節中概述的原則,咱們將設備管理器組件建模爲具備三個級別的Actor樹: 架構
出於如下緣由,咱們選擇了這種三層架構:併發
擁有各個Actor的組:ide
將傳感器建模爲單個設備角色:
經過定義架構,咱們能夠開始使用協議來註冊傳感器。
做爲第一步,咱們須要設計協議以註冊設備和建立將負責它的組和設備Actor。此協議將由DeviceManager組件自己提供,由於它是惟一已知且可預先使用的Actor:按需建立設備組和設備Actor。
更詳細地查看註冊,咱們能夠概述必要的功能:
咱們將用於傳達註冊請求及其確認的消息有一個簡單的定義:
在這種狀況下,咱們沒有在消息中包含請求ID字段。因爲註冊發生一次,當組件將系統鏈接到某個網絡協議時,ID並不重要。可是,一般最佳作法是包含請求ID。
如今,咱們將從下往上開始實施協議。在實踐中,自上而下和自下而上的方法均可以工做,但在咱們的狀況下,咱們從自下而上的方法中受益,由於它容許咱們當即編寫新功能的測試,而不會模擬咱們須要的部分後來建造。
咱們層次結構的底部是Device actors。他們在註冊過程當中的工做很簡單:回覆註冊請求並向發件人發送確認。謹慎地對針對不匹配的組或設備ID的請求添加安全措施。
咱們假設註冊消息的發送者的ID保留在上層。咱們將在下一部分向您展現如何實現這一目標。
設備actor註冊碼以下所示:
咱們如今能夠編寫兩個新的測試用例,一個執行成功註冊,另外一個測試ID不匹配的狀況:
咱們使用了TestKit中的expectNoMsg()輔助方法。此斷言將一直等到定義的時間限制,若是在此期間收到任何消息,則會失敗。若是在等待期間沒有收到消息,則斷言經過。保持這些超時較低(但不能過低)一般是一個好主意,由於它們會增長大量的測試執行時間。
下節再續!
原文:https://doc.akka.io/docs/akka/2.5/guide/tutorial_4.html
有什麼討論的內容,能夠加我公衆號: