簡體   English   中英

Service Fabric actor接收來自其他actor的事件

[英]Service Fabric actors that receive events from other actors

我正在嘗試對包含發布它的用戶信息的新聞帖子進行建模。 我認為最好的方法是發送用戶摘要信息和消息以創建新聞帖,但是如果基礎用戶信息發生變化,我有點困惑如何更新摘要信息。 現在我有以下NewsPostActorUserActor

public interface INewsPostActor : IActor
{
    Task SetInfoAndCommitAsync(NewsPostSummary summary, UserSummary postedBy);

    Task AddCommentAsync(string content, UserSummary, postedBy);
}

public interface IUserActor : IActor, IActorEventPublisher<IUserActorEvents>
{
    Task UpdateAsync(UserSummary summary);
}

public interface IUserActorEvents : IActorEvents
{
    void UserInfoChanged();
}

我遇到的問題是如何讓INewsPostActor實現訂閱IUserActor發布的IUserActor 我在https://github.com/Azure/servicefabric-samples/blob/master/samples/Actors/VS2015/VoiceMailBoxAdvanced/VoicemailBoxAdvanced.Client/Program.cs#L45的示例代碼中看到了SubscribeAsync方法但是它是適合在NewsPostActor實現中使用它嗎? 會不會因為某種原因讓一個演員活着?

另外,我可以在新聞帖子中添加評論,那么NewsPostActor還要為每個評論的唯一用戶保留每個IUserActor的訂閱?

事件可能不是您想要用於此的事件。 從事件文檔( https://azure.microsoft.com/en-gb/documentation/articles/service-fabric-reliable-actors-events/

Actor事件提供了一種從Actor向客戶端發送盡力通知的方法。 Actor事件是為Actor-Client通信而設計的,不應該用於Actor-to-Actor通信。

值得考慮直接通知相關參與者或擁有管理此通信的演員/服務。

Service Fabric Actors尚不支持發布/訂閱體系結構。 (有關當前狀態,請參閱Azure反饋主題 。)

正如charisk已經回答的那樣,Actor-Events也不是一種可行的方式,因為它們沒有任何交付保證。

這意味着,UserActor必須在名稱更改時發起請求。 我可以想到多種選擇:

  • 在IUserAccount.ChangeNameAsync()中,您可以直接向所有NewsPostActors發送請求(假設UserAccount包含他的帖子列表)。 但是,這會引入額外的延遲,因為客戶端必須等到所有帖子都已更新。

  • 您可以異步發送請求。 一種簡單的方法是在ChangeNameAsync()中將Actor狀態的“NameChanged”屬性設置為true,並讓Timer定期檢查此屬性。 如果為true,它會向所有NewsPostActors發送請求,然后將該屬性設置為false。 這將是對以前版本的改進,但它仍然意味着UserAccounts和NewsPosts之間存在非常強大的聯系。

  • 更具可擴展性的解決方案是引入“消息路由器” - 模式。 您可以在Vaughn Vernon的優秀書籍“演員模型的反應性消息傳遞模式”中閱讀有關此模式的更多信息。 這樣您就可以通過向路由器發送“NameChanged”消息來基本設置自己的Pub / Sub模型。 NewsPostActors可以 - 根據您的可伸縮性需求 - 直接或通過某種間接(可能是NewsPostCoordinator)訂閱該消息。 此外,根據您的可擴展性需求,路由器可以直接或異步轉發消息(首先將其存儲在隊列中)。

暫無
暫無

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

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