据我所知,Service Fabric 的参与者模型仅支持“请求-答复”样式的通信。有什么方法可以实现“一劳永逸”式的沟通吗? (例如:就像 Akka 中的“询问”与“告诉”消息一样?)
我遇到了这篇博文 ( http://mikhail.io/2016/01/fire-and-forget-in-service-fabric-actors/ ),但不确定这是否会产生任何负面后果,或者是否有推荐的方法来实现此目的?
最佳答案
在你的actor上有一个初始化方法,它可以为你的任务提供所需的种子。设置一个计时器并从初始化方法返回。当计时器触发时,关闭计时器,并运行您的逻辑“Fire and 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
}
}
关于azure - 与 Actor 进行即发即忘消息传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38103815/