作业失败时在 Hangfire 作业过滤器中获取作业参数

Get a parameter of a job in Hangfire job filter when Job Failed

为了在工作失败时发送电子邮件,我正在尝试实现这样的功能:Hangfire send emails after retry .

但是我需要访问执行的作业方法的参数。这个参数对应一个公司的ID,我需要这个想法才能知道我应该使用哪个connectionString来访问db。

我需要在这里访问一个数据库,以了解我们是否已经为当前的工作发送了一封电子邮件(以免每次相同的工作失败时都发送垃圾邮件)。

所以我会有这样的东西:

我不知道这是否是正确的方法,如果你们有任何改进的想法,请随意!

但是,我的问题仍然是我可以访问已执行作业方法的参数来了解公司 ID 吗?或者当作业执行失败时,有什么方法可以将作业方法中的数据提供给 AttributeFilter(如袋子等...)?

感谢阅读我!

我会用 IApplyStateFilter

尝试这样的事情
public class NotifyExceptionsServerFilter : IApplyStateFilter
{
    public void OnStateApplied(ApplyStateContext context, IWriteOnlyTransaction transaction)
    {

        var c = context.NewState as FailedState;
        if (c?.Exception != null && context.Job.Method.Name == "YourMethodName")
        {
            var companyId = context.Job.Args[CompanyIdArgumentIndexInYourMethodSignature];

            // Do stuff using CompanyId
        }
    }

    public void OnStateUnapplied(ApplyStateContext context, IWriteOnlyTransaction transaction)
    {
    }
}

大致思路是这样的。如果它能工作,它至少需要通过特定的测试来保护,以防止重构引起的错误,因为它依赖于反射。