使用HangFire启动实现接口的作业时如何使用自定义作业名称

我正在尝试使用HangFire来计划实现我称为IScheduledService的特定接口的任何类。这些服务按预期运行,但是HangFire UI在HangFire仪表板PerformService()中始终为每个服务显示相同的名称。我知道这是设计使然,因为我将相同的函数名称传递给每个作业,但是用户并不真正知道正在运行的特定作业。

我使用ServiceName创建了接口,因为我认为可以将其传递到HangFire中以覆盖可见的作业名称,而不是被调用的函数名称,但是看不到修改接口的功能。工作名称。有没有一种方法可以提供自定义的作业名称,以便HangFire用户界面根据ServiceName属性的值显示每个作业的标题?

public interface IScheduledService
{
    string ServiceId { get; }
    string ServiceName { get; }
    void PerformService();
}

public class Service1 : IScheduledService
{
    public string ServiceId { get => "e56643b1-f0cf-44b2-81ef-bf7a085de760"; }
    public string ServiceName { get => this.GetType().Name; }

    public void PerformService()
    {
        Console.WriteLine($"Hello world from {ServiceName}");
    }
}
sibo3615 回答:使用HangFire启动实现接口的作业时如何使用自定义作业名称

尝试使用JobDisplayNameAttribute。

我在代码中看到了几个可以渲染它的地方...

在RecurringJobsPage和JobDetailsPage中,您可以看到它调用HtmlHelper.JobName

HtmlHelper有一些代码在寻找JobDisplayNameAttribute

https://github.com/HangfireIO/Hangfire/blob/a07ad0b9926923db75747d92796c5a9db39c1a87/src/Hangfire.Core/Dashboard/HtmlHelper.cs

您可以在1.7.0版中发现的问题中看到对它的引用。如果您使用的是该版本。

https://github.com/HangfireIO/Hangfire/issues/1136

在旧版Issue中也有一些引用,关于在方法上使用DisplayNameAttribute。

尝试像这样用JobDisplayName或DisplayName装饰方法

[JobDisplayName("RunJobNumberOne")]
public void RunSomeJob(string arg){

,

您可以显示多个参数。在我的实现中,我使用DisplayName代替JobDisplayName(Hangfire版本1.7.5)

public static class Func 
{
   [DisplayName("JobID: {0} => [{1}:{2}]")]
   public static void Execute(long requestID,string stepName,string stepLocation)
   {
      // do work here
   }
}

// above method is called by the background.enqueue call
BackgroundJob.Enqueue(() => Func.Execute(longId,stepName,stepLocation);

似乎提供了与所执行工作相关的信息。

本文链接:https://www.f2er.com/3123911.html

大家都在问