使用默认队列时类型不包含方法



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

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

我没有得到作业(功能)和排队之间的关系。有人可以向我解释为什么我的工作在"默认"队列中执行时失败了,为什么当他们以不同的队列执行时会成功?

另外,有人可以向我解释为什么我尝试跑来工作时我会面对"未找到方法"?

我问这些问题,因为我想在所有这些问题背后学习真正的原因,而不是提出推论。

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

  • 使用Schedule(或重复出现的作业)时支持Arent的队列名称,仅当您将它们直接Enqueue直接使用时(除非您自定义创建一个系统来支持它)。请参阅此信息,请参阅此信息,但它仍然有效。<<<<<<<<<<<<<<<<<<<<<<<<<<<</p>

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

  • 但是每个服务都有一个带有默认队列的HF服务器,并且没有迹象表明哪个服务是正确的...因此,HF可能会尝试在另一个服务的服务器上运行它,而不会有任何关于工作正在调用的想法,因为它没有链接到正确的代码库(再次,请参阅此)。另一方面,如果指定队列的名称,并且该名称仅在服务器"链接到正确的代码"上,则HF将在该队列上运行作业(同样,只要您不安排它),找到所需的东西,一切都会起作用

希望这可以帮助一点

最新更新