我应该如何将Service Fabric Actors联系在一起?

时间:2016-07-12 06:10:15

标签: azure-service-fabric

我有许多代表单个物理对象(物联网设备)的Actors。

在查看我们的代码库时,我们有时会将现有的ActorReference传递给其他Actors,有时我们会创建一个新的代理对象。

我原本认为传入现有的Actor Reference更有效,但我担心副作用,所以创建一个新的代理对象似乎风险较低。

每种方法的专业人士和专家有哪些,在决定使用哪种方法时应该考虑什么?

2 个答案:

答案 0 :(得分:2)

通过研究反编译的源代码,我觉得使用ActorReference.Bind和ActorProxy.Create几乎是相同的:

public object Bind(Type actorInterfaceType)
{
    return ActorProxy.DefaultProxyFactory.CreateActorProxy(actorInterfaceType, this.ServiceUri, this.ActorId, this.ListenerName);
}

public static TActorInterface Create<TActorInterface>(ActorId actorId, string applicationName = null, string serviceName = null, string listenerName = null) where TActorInterface : IActor
{
    return ActorProxy.DefaultProxyFactory.CreateActorProxy<TActorInterface>(actorId, applicationName, serviceName, listenerName);
}

因此,在可靠性和性能方面都没有差异。

ActorReference支持序列化,因此它似乎更适合在actor之间传递。

答案 1 :(得分:0)

传递ActorReference是更好的推荐方法,因为它允许您在接收端使用自定义ActorProxyFactory创建ActorProxy。如果一个actor作为接口传递,则反序列化过程使用默认的actor代理工厂将引用绑定到代理,并将代理对象提供给接收方法。