Aracılığıyla paylaş


Service Fabric Reliable Actors türü serileştirmeyle ilgili notlar

Tüm yöntemlerin bağımsız değişkenleri, bir aktör arabirimindeki her yöntem tarafından döndürülen görevlerin sonuç türleri ve bir aktörün durum yöneticisinde depolanan nesneler veri sözleşmesi seri hale getirilebilir olmalıdır. Bu durum aktör olay arabirimlerinde tanımlanan yöntemlerin bağımsız değişkenleri için de geçerlidir. (Aktör olay arabirimi yöntemleri her zaman void döndürür.)

Özel veri türleri

Bu örnekte, aşağıdaki aktör arabirimi adlı VoicemailBoxözel bir veri türü döndüren bir yöntemi tanımlar:

public interface IVoiceMailBoxActor : IActor
{
    Task<VoicemailBox> GetMailBoxAsync();
}
public interface VoiceMailBoxActor extends Actor
{
    CompletableFuture<VoicemailBox> getMailBoxAsync();
}

Arabirim, bir nesneyi depolamak için durum yöneticisini kullanan bir VoicemailBox aktör tarafından uygulanır:

[StatePersistence(StatePersistence.Persisted)]
public class VoiceMailBoxActor : Actor, IVoicemailBoxActor
{
    public VoiceMailBoxActor(ActorService actorService, ActorId actorId)
        : base(actorService, actorId)
    {
    }

    public Task<VoicemailBox> GetMailboxAsync()
    {
        return this.StateManager.GetStateAsync<VoicemailBox>("Mailbox");
    }
}

@StatePersistenceAttribute(statePersistence = StatePersistence.Persisted)
public class VoiceMailBoxActorImpl extends FabricActor implements VoicemailBoxActor
{
    public VoiceMailBoxActorImpl(ActorService actorService, ActorId actorId)
    {
         super(actorService, actorId);
    }

    public CompletableFuture<VoicemailBox> getMailBoxAsync()
    {
         return this.stateManager().getStateAsync("Mailbox");
    }
}

Bu örnekte, VoicemailBox nesne şu durumlarda serileştirilir:

  • Nesnesi bir aktör örneği ile çağıran arasında iletilir.
  • Nesne, diskte kalıcı hale geldiği ve diğer düğümlere çoğaltıldığı durum yöneticisine kaydedilir.

Reliable Actor çerçevesi DataContract serileştirmesini kullanır. Bu nedenle, özel veri nesneleri ve üyeleri sırasıyla DataContract ve DataMember öznitelikleriyle açıklama eklenmelidir.

[DataContract]
public class Voicemail
{
    [DataMember]
    public Guid Id { get; set; }

    [DataMember]
    public string Message { get; set; }

    [DataMember]
    public DateTime ReceivedAt { get; set; }
}
public class Voicemail implements Serializable
{
    private static final long serialVersionUID = 42L;

    private UUID id;                    //getUUID() and setUUID()

    private String message;             //getMessage() and setMessage()

    private GregorianCalendar receivedAt; //getReceivedAt() and setReceivedAt()
}
[DataContract]
public class VoicemailBox
{
    public VoicemailBox()
    {
        this.MessageList = new List<Voicemail>();
    }

    [DataMember]
    public List<Voicemail> MessageList { get; set; }

    [DataMember]
    public string Greeting { get; set; }
}
public class VoicemailBox implements Serializable
{
    static final long serialVersionUID = 42L;
    
    public VoicemailBox()
    {
        this.messageList = new ArrayList<Voicemail>();
    }

    private List<Voicemail> messageList;   //getMessageList() and setMessageList()

    private String greeting;               //getGreeting() and setGreeting()
}

Sonraki adımlar