日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

akka应用_处理Akka应用程序中的每个事件

發布時間:2023/12/3 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 akka应用_处理Akka应用程序中的每个事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

akka應用

這里的事件,那里的事件,到處都是事件。 發布有關檢查每一項Akka事件最終都能找到歸宿的信息。

Akka和基于事件的React式應用程序是創建軟件的新方法。 在當前基于Scala的項目中,我們非常密集地使用Akka。 事件非常適合我們的用例,因為我們正在與外部API通信,這可能很慢。 使用傳統的同步方法處理時,這可能會損害用戶體驗。 但是幸運的是,我們的請求可以異步執行,因此將它們傳遞給Actor似乎是一個好主意。

當事情得到控制時

但是,事件雖然很酷并且非常有用,但是如果沒有經驗的人來處理,事件仍然會傷害項目。 異步性質使應用程序流程乍一看很難理解。 而且,每當您向系統中添加新的參與者或事件類型時,您忘記正確處理某件事的可能性就會增加。

讓我們看一下示例類,這是一個處理與Image標簽和注釋關聯的事件的actor:

class YourActor extends Actor {override def receive = {case event: ImageTagged =>doSomething()case event: OtherImageTaggedByFriend =>doSomething2()case event: MostMotedUserImage =>doSomething3()case event: MostCommentedFriendImageChosen =>doSomething4()} }

當您添加下一個事件時,比如說MostLikedFriendImage,您很容易忘記在actor中添加處理程序大小寫部分,尤其是當有多個actor在偵聽此類事件時。

干違反解決方案

有一種簡單的解決方案可以檢測遺忘的處理程序。 我們可以將case _添加到每個actor:

class YourActor extends Actor {override def receive = {case event: ImageTagged =>doSomething()case event: OtherImageTaggedByFriend =>doSomething2()case event: MostMotedUserImage =>doSomething3()case event: MostCommentedFriendImageChosen =>doSomething4()case event: _ :logger.error("Received unknown event " + event.getClass.toString)} }

雖然對于一個或兩個參與者來說看起來還不錯,但將相同的代碼片段添加到多個參與者中卻很麻煩,并且違反了DRY原則。 但是,最危險的是,您團隊中的某個人可能會忘記添加它(就像有人說的那樣: “每個可以被遺忘的手動任務都會被遺忘” )。 那么也許我們應該尋求更好的解決方案?

對任何未處理的事件做出React

幸運的是,我們不會停留在容易出錯的方法上。 當actor無法處理傳遞給他的事件時,將引發UnhandledMessage并將其發布到ActorSystem的EventStream。

因此,要處理每個被遺忘的事件,我們可以創建偵聽器并將其訂閱到EventStream:

class UnhandledMessageListener extends Actor {val logger = LoggerFactory.getLogger(getClass)override def receive = {case message: UnhandledMessage =>logger.error(s"CRITICAL! No actors found for message ${message.getMessage}"))if (!Environment.isProduction) {// Fail fast, fail LOUDlogger.error("Shutting application down")System.exit(-1)}} }

并訂閱代碼片段:

val actorSystem = ActorSystem.create("projectActorSystem")val listener = actorSystem.actorOf(Props(new UnhandledMessageListener()))actorSystem.eventStream.subscribe(listener, classOf[UnhandledMessage])

就是這樣。 現在,每當有一個參與者沒有處理的事件時,我們都會知道這一點,尤其是在非生產環境中部署應用程序時!

翻譯自: https://www.javacodegeeks.com/2014/06/handle-every-event-in-your-akka-application.html

akka應用

總結

以上是生活随笔為你收集整理的akka应用_处理Akka应用程序中的每个事件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。