Hangfire - 有没有办法在创建作业时将额外的元数据附加到作业以便以后能够识别它们?

Hangfire - Is there a way to attach additional meta data to jobs when they are created to be able to identify them later?

我希望在 Asp.Net 核心应用程序中实施 Hangfire。

但是,我正在努力了解如何最好地防止用户创建重复的 Hangfire“即发即弃”作业。

问题

假设用户通过该应用程序创建了一个作业,该作业执行与特定客户端相关的一些处理。该过程可能需要几分钟才能完成。我希望能够阻止用户为同一个客户端创建另一个作业,而 Hangfire 仍在处理该客户端的其他作业(即,在任何时候只能有一个特定客户端的 1 个处理作业,尽管有几个不同的客户也可以各自处理自己的工作。

解决方案?

我需要一种方法来在创建每个作业时附加额外的元数据(在本例中为客户端 ID),然后我可以使用它来询问当前在 Hangfire 中处理的作业,看看是否有任何它们与相关的客户 ID 相关。

看起来这样的基本功能对此类场景非常有用,但我得出的结论是不支持这样的功能,这让我感到惊讶。

...除非你知道不同。

Hangfire 看起来很棒,我很想用它,但这对我来说可能是个阻碍。

如有任何建议,我们将不胜感激。

谢谢

I need a way to attach additional meta-data (in this example, the client id) to each job as it is created

通过hangfire 过滤器可以实现向作业添加元数据。 你可以看看这个答案。

根据您的需要,您可以使用更多过滤器类型。 例如,如果当前正在处理另一个作业,IElectStateFilter 可能有助于过滤掉作业。 如果您有多个处理服务器,您将需要自己的存储解决方案来处理您自己当前的自定义 processing/priority/locking 机制。