[英]Naming conventions for Akka messages and actors
我目前正在制作一個非常大的基於Akka的Java應用程序,而且我遇到了一些讓我感到困惑的問題。
我目前的包布局看起來像這樣:
我的Mobile
類充當actors
包內actors
的主管。
因為我不想為每個HttpClient
和Account
創建一組新的Actors,所以我將它們傳遞給消息包中存儲的消息對象,以及接收最終結果的端點ActorRef
。 但是,這會創建一個非常混亂的messages
包,每個actor都有不同的消息。 例如。 MobileForActor1
, Actor1ForMobile
, MobileForActor2
等現在我的問題是,是否有一個公約用於處理這個問題的這類東西,並且是我的結構( Mobile
- > Actor1
- > Mobile
- > Actor2
- >等)的方式Akka希望它是或者我只需要對消息進行排序( Mobile
- > Actor1
- > Actor2
- >等)?
現在我正在向我的Mobile
actor發送一個ConnectMessage
,然后將它發送給Actor1
, Actor1
處理它並將新消息發送回Mobile
, Mobile
然后將該響應發送給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-1
, Car-2
等)組合在一起。
如果層次結構對您很重要,我建議只將父actor附加到名稱。 像Phone-1-in-Car-7
意味着Phone-1
包含在Car-7
。 然后,您可以通過遵循父鏈接以編程方式和手動方式組合層次結構。
我認為ConnectMessage
“消息”是多余的。 只需將消息名稱設置為“Connect”或甚至更好的“ConnectToThing”(無論是什么,如果相關的話)。
我不會像你在Message2
建議的那樣復雜化你的消息名稱。 使用最少量的信息對於讀取這些名稱的任何人都有用。 我認為這部分問題可能導致對此缺乏回應。 我發現它很混亂,因為很多細節都沒有了。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.