与演员一起消防和忘记消息?

时间:2016-06-29 15:21:06

标签: azure azure-service-fabric

据我所知,Service Fabric的演员模型仅支持“请求 - 回复”式通信。有什么方法可以实现“即发即忘”式的沟通吗? (例如:像Akka中的“ask”vs“tell”消息一样?)

我参与了这篇博客文章(http://mikhail.io/2016/01/fire-and-forget-in-service-fabric-actors/),但我不确定这是否会产生任何负面影响,或者是否有推荐的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

对你的演员有一个初始化方法,可以为你的任务提供所需的任何内容。设置计时器并从initialize方法返回。当计时器触发时,关闭计时器,并运行逻辑Fire和Forget,保证您的工作已执行。下面粗略的样本。

public class SomeActor : Actor, ISomeActor
{
    private IActorTimer _sendTimer;

    protected override async Task OnActivateAsync()
    {
        await base.OnActivateAsync();
    }

    protected override async Task OnDeactivateAsync()
    {
        await this.ExecuteAgents();
        await base.OnDeactivateAsync();
    }

    public Task Initialize()
    {
        if (_sendTimer == null)
        {
            //setup timer
            _sendTimer = this.RegisterTimer((obj) =>
            {
                return this.Execute();
            },
                null,
                TimeSpan.FromSeconds(1),
                TimeSpan.FromSeconds(30));
        }
    }

    private async Task ExecuteAgents()
    {
        this.UnegisterTimer(_sendTimer);

        //Perform workload
    }
}