使用默认队列

时间:2017-11-25 13:57:07

标签: c# redis job-scheduling hangfire

我正在尝试排队或安排工作(例如发送邮件)。以下是我在试用/错误过程中观察到的内容:

  • 在开发和生产环境中,我们使用相同的redis服务器。 Redis配置相同,双方仅使用一个队列:default。因此,当其他开发人员调试代码时,它们将成为正在侦听默认队列的服务器。
  • 当我尝试排队或安排我最近在我的机器上开发并调试它的作业时,它没有执行,可以在“重试”部分看到。根本找不到方法。 10次​​重试后,它失败了。 (顺便说一句,我使用Enqueue<T>Schedule<T>方法。)
  • 当我在Startup.cs中引入新队列(例如test),并使用BackgroundJobClient将新作业入队并使用EnqueuedState("test")指定队列名称时,会立即执行。

在所有这些之后,我没有得到作业(函数)和队列之间的关系。有人可以解释一下为什么我的作业在“默认”队列中执行时失败,以及为什么它们在不同的队列中执行时会成功?

另外,有人可以解释我为什么在尝试找工作时遇到“找不到方法”的问题吗?

我问这些问题,因为我想了解所有这些问题背后的真正原因,而不是做出推论。

1 个答案:

答案 0 :(得分:0)

不确定这是否会回答,但我遇到了同样的问题,并发现了一些事情

  • 使用Schedule(或重复工作)时,只有当您直接Enqueue它们时才支持队列名称(除非您自定义创建系统以支持它)。{{3} },它已经过时但应该仍然有效。

  • 如果您有多个服务运行hangfire来管理不同类型的作业,请确保为每个服务提供一个不同的hangfire数据库来存储他们的数据。如果您将它们全部放在同一个数据库中,那么当一个工作需要时启动HF将搜索默认队列来运行它(除非你指定队列名称但是......见上文)。

  • 但是每个服务都有一个带有默认队列的HF服务器,并且没有指示哪个是正确的...所以HF可能会试图在另一个服务的服务器上运行它,它没有任何服务关于作业调用的概念,因为它没有链接到正确的代码库See this。 另一方面,如果您指定队列的名称,并且该名称仅在服务器“链接”到正确的代码上,则HF将在该队列上运行作业(同样,只要您不安排它),找到它需要的东西,一切都会起作用

希望这有点帮助