Azure Service Fabric - 固定时间作业

Posted

技术标签:

【中文标题】Azure Service Fabric - 固定时间作业【英文标题】:Azure Service Fabric - Fixed time Job 【发布时间】:2021-11-30 04:38:25 【问题描述】:

我正在处理一个 Service Fabric 项目,我需要实现一个可以在特定时间(比如每 16 小时或 24 小时)执行的计划作业。

这是我的有状态actor服务实现

[StatePersistence(StatePersistence.None)]
internal class Actor3 : Actor, IActor3, IRemindable

    public Actor3(ActorService actorService, ActorId actorId): base(actorService, actorId)
    
    

    public async Task RegisterReminder()
    
        try
        
            var previousRegistration = GetReminder("Reminder2");
            await UnregisterReminderAsync(previousRegistration);
        
        catch (ReminderNotFoundException)  
        var reminderRegistration = await RegisterReminderAsync("Reminder2", null, TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(1));
    

    public async Task ReceiveReminderAsync(string reminderName, byte[] state, TimeSpan dueTime, TimeSpan period)
    
        var location = Directory.GetCurrentDirectory();
        var current = DateTime.Now;
        Thread.Sleep(15000);
        using (var writer = File.AppendText("actor.txt"))
        
            await writer.WriteLineAsync("2 :: " + current.ToString() + " --> " + DateTime.Now.ToString());
    
    

在代码中,我已经注册了我的演员服务,在注册后 1 分钟后开始执行,然后每 1 分钟执行一次。

当我查看“actor.txt”中的日志时,我看到的内容如下:

2 :: 2021-10-11 17:31:15 --> 2021-10-11 17:31:30
2 :: 2021-10-11 17:32:30 --> 2021-10-11 17:32:45
2 :: 2021-10-11 17:33:45 --> 2021-10-11 17:34:00

从上面的日志可以看出

第一次执行于 17:31:15 开始,于 17:31:30 完成(耗时 15 秒) 第二次执行于 17:32:30 开始(距结束时间 1 分钟后),并于 17:32:45 完成。 根据上述要求,它应该在 17:32:15 开始(因为两次执行之间的预期持续时间是 1 分钟,而不是 1 分钟 + 之前的执行时间。

似乎我很难找到可以让演员在特定时间执行的解决方案。 (即每天下午 4 点或 12 点)

【问题讨论】:

【参考方案1】:

考虑创建一个带有定期触发提醒的演员,假设每分钟触发一次。 (取决于所需的准确性)在其状态中,定义指定何时需要执行操作的“到期时间”。

将“到期时间”与当前时间进行比较,包括一个增量。如果有重叠,请执行任务。

在状态内部,存储最后一次执行的时间戳,避免重复执行。

定期检查错过的执行。

这样,您可以处理集群中的临时中断(服务移动、重启、升级等)

【讨论】:

我应该假设服务结构本身没有开箱即用的功能吗? 您正在使用演员提醒功能,但是,它是在一个时间段而不是绝对时间上工作的。 我愿意使用任何其他功能。 (只是没有不同的云服务)。

以上是关于Azure Service Fabric - 固定时间作业的主要内容,如果未能解决你的问题,请参考以下文章

aZURE Service Fabric

Azure Service Fabric:无法运行本地 Service Fabric 群集

Azure Service Fabric 群集端点不可访问

Azure App Service 与 Azure Service Fabric [关闭]

为 Service Fabric 配置 Azure 部署

Azure Service Fabric