簡體   English   中英

Akka消息和actor的命名約定

[英]Naming conventions for Akka messages and actors

我目前正在制作一個非常大的基於Akka的Java應用程序,而且我遇到了一些讓我感到困惑的問題。

我目前的包布局看起來像這樣:

項目結構

我的Mobile類充當actors包內actors的主管。

因為我不想為每個HttpClientAccount創建一組新的Actors,所以我將它們傳遞給消息包中存儲的消息對象,以及接收最終結果的端點ActorRef 但是,這會創建一個非常混亂的messages包,每個actor都有不同的消息。 例如。 MobileForActor1Actor1ForMobileMobileForActor2等現在我的問題是,是否有一個公約用於處理這個問題的這類東西,並且是我的結構( Mobile - > Actor1 - > Mobile - > Actor2 - >等)的方式Akka希望它是或者我只需要對消息進行排序( Mobile - > Actor1 - > Actor2 - >等)?

現在我正在向我的Mobile actor發送一個ConnectMessage ,然后將它發送給Actor1Actor1處理它並將新消息發送回MobileMobile然后將該響應發送給Actor2 ,並且循環繼續,基於創建新消息舊消息。 例如。 new Message2(message1.foo, message1.bar, message1.baz, newComputatedResult, newComputatedResult2, etc);

這是一個好習慣,還是應該包含舊實例(可能包含不再有用的信息)並包含新內容? 例如。 new Message2(message1, newComputatedResult, newComputatedResult2, etc);

或者我應該做一些完全不同的事情?

我想過使用TypedActors但是那些需要使用瀑布模式,我不知道如何傳遞想要接收最終結果的偵聽器的ActorRef。

我希望自己能夠理解,因為英語不是我的母語,而且每個人都清楚這個問題。

我是Akka開發人員的開始並且喜歡這個想法,但由於文檔沒有很好地涵蓋這一點,我認為這將是最好的問題。 謝謝閱讀!

為了回應這個問題,我會冒一些評論,因為我在Akka的學習曲線中處理了同樣的問題。 我認為你要求一些經驗法則,因此我的內容包含在內。

首先,創造演員非常便宜; 它們非常輕巧。 那么,為什么不為每個HttpClient和Account創建一個,並為它們提供從其身份派生的合適名稱? 這也避免了你必須盡可能多地傳遞它們,可能會使你的代碼整齊。

其次,保持消息名稱簡短,重點突出並以動詞開頭。 每條消息都應告訴演員做某事,以便你希望名字通過動詞反映出來。

第三,消息集與演員一起。 我通常在actor類的伴隨對象中聲明它們,因此使用它們就像ActorClass.MessageName除非它在ActorClass ,然后它只是MessageName

第四,在演員的名字附加一個計數器。 我經常只將一個計數器(使用AtomicInteger )與該類型的名稱( Car-1Car-2等)組合在一起。

如果層次結構對您很重要,我建議只將父actor附加到名稱。 Phone-1-in-Car-7意味着Phone-1包含在Car-7 然后,您可以通過遵循父鏈接以編程方式和手動方式組合層次結構。

我認為ConnectMessage “消息”是多余的。 只需將消息名稱設置為“Connect”或甚至更好的“ConnectToThing”(無論是什么,如果相關的話)。

我不會像你在Message2建議的那樣復雜化你的消息名稱。 使用最少量的信息對於讀取這些名稱的任何人都有用。 我認為這部分問題可能導致對此缺乏回應。 我發現它很混亂,因為很多細節都沒有了。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM