異步發送,Akka異步通訊《three》譯

 2023-11-19 阅读 22 评论 0

摘要:異步通訊 ? ? Actors是被動的和消息驅動的,Actors在收到消息之前不會做任何事,使用異步消息進行通信。這確保發送方不會停留在等待其消息由接收者處理。相反,發送者將消息發送到收件人的郵箱中,并可以自由地進行其他工作。Actors的郵箱本質上是一

異步通訊

? ? Actors是被動的和消息驅動的,Actors在收到消息之前不會做任何事,使用異步消息進行通信。這確保發送方不會停留在等待其消息由接收者處理。相反,發送者將消息發送到收件人的郵箱中,并可以自由地進行其他工作。Actors的郵箱本質上是一個具有排序語義的消息隊列。從同一個Actor發送的多個消息的順序保存下來,但是可以與其他Actor發送的消息交織在一起。

????您可能會想知道當Actors不是處理消息時,即在實際工作時,在做什么?它處于一個懸浮狀態,它不消耗除內存之外的任何資源。再次顯示出Actors的輕量級、高效的性質。

發送消息給Actor

????要將消息放到Actors郵箱里,使用ActorRef的“!(bang)方法”。例如,helloworld的主類將消息發送給類似于此的Greeter Actor:

異步發送、

????Greeter Actor也發消息給Printer Actor:printerActor ! Greeting(greeting)

????我們已經研究了如何創建Actor和發送消息。現在,讓我們通過對主要類的整體進行回顧。

????helloworld中的主類創建并控制了Actors。注意使用一個ActorSystem作為容器和使用actorOf創建Actors。最后,該類發送消息給Actors。

? ?

?同樣地,讓我們再看看定義Actors和接受的消息的完整源代碼(詳細代碼)。

串行通信同步異步,?作為另一個最佳實踐,我們應該提供一些測試覆蓋率。

測試Actors

??helloworld示例中的測試說明了使用Scalatest框架,測試覆蓋率還不夠完整。它簡單地說明了測試Actor代碼和提供一些基本概念是多么容易。你可以繼續完整,來鍛煉增加你自己的知識 。

?Test類的定義

?我們開始看看AkkaQuickstartSpec.scala源文件中測試類的定義:

? ? ?

舉例說明同步和異步通信?測試類繼承了akka.test.TestKit,它是Actors和Actors系統集成測試的模塊。這個類只使用了的TestKit提供的一部分功能,其他擴展類則來自于ScalaTest。它們為helloworld測試用例提供語法和功能。例如,通過擴展FlatSpecLike,我們可以用“x應該y”格式編寫測試規范,例如:

?測試方法

????既然我們知道了一些基本概念,讓我們來看看已經實現的測試方法。

????集成測試可以幫助我們確保參與者在異步運行。第一個測試使用TestProbe來詢問并驗證預期的行為。讓我們來看看源代碼片段:

????一旦我們引用了TestProbe,我們將它傳遞給了Greeter作為構造函數參數的一部分,然后我們給Greeter發送兩條信息;一個設置問候人打招呼,另一個觸發問候。TestProbe上的expectMsg方法驗證消息是否已發送(完整示例)。

異步,????示例代碼只會觸及到的中可用的基本功能,現在我們已經測試了所有代碼。

運行示例

????您可以從命令行或IDE運行HelloWorld應用程序。但是,在我們再次運行應用程序之前,讓我們快速查看一下構建工具:sbt。

構造文件

? ??sbt使用build.sbt文件來處理項目。這個項目的build.sbt文件如下所示:

同步轉異步的通訊場景,????這個構建文件非常簡單。從本質上說,它創建了一個項目Hel-AkkaScala,并聲明了項目依賴關系。我們還必須聲明使用哪個版本的sbt,這是在文件project/build.properties中完成的:

????正如前面所做的那樣,從控制臺運行應用程序:

? ? 1./sbt?->?OSX/Linux 或者?sbt.bat?->?Windows

? ? ?sbt下載項目依賴項,> 提示符表示SBT已在交互模式下啟動。

? ? 2.然后我們輸入 reStart

? ? 然后我們可以看到以下的輸出:

????

????還記得測試實現將Printer Actor設置為使用Akka記錄器嗎?這提供了許多額外的信息。例如,日志輸出包含Actor的時間和名稱。讓我們先關注Actor的輸出:

????這是我們向GreeterActor發送消息的代碼的結果:

????嘗試再運行幾次代碼,并確保注意到日志記錄的順序。你注意到了嗎?順序不是固定的,這里發生了什么?異步行為變得明顯。這對你來說可能是一種新的思維模式。但是,一旦你獲得了經驗,一切都會變得清晰;就像“黑客帝國”中的尼歐一樣。

?有什么討論的內容,可以加我微信公眾號:

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/183414.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息