使用默认队列时,类型不包含方法
问题描述:
我试图排队或安排作业(例如发送邮件)。以下是我在试用/错误过程中观察到的情况:使用默认队列时,类型不包含方法
- 在开发和生产环境中,我们使用的是相同的redis服务器。 Redis配置相同,双方仅使用一个队列:
default
。因此,当其他开发人员正在调试代码时,他们将成为正在侦听默认队列的服务器。 - 当我试图排队或安排一项工作,我最近在我的机器上开发并进行调试时,它不会执行,它在'Retries'部分中看到。方法根本找不到。重试10次后,失败。 (顺便说一句,我使用
Enqueue<T>
和Schedule<T>
方法。) - 当我介绍一个新的队列(如测试)在Startup.cs,并与
BackgroundJobClient
与EnqueuedState("test")
排队的新工作,并指定队列名称,会立即执行。
在所有这些之后,我没有得到作业(函数)和队列之间的关系。有人可以解释为什么我的作业在“默认”队列中执行时失败,以及为什么他们在不同队列中执行时成功?
另外,有人可以解释我为什么当我尝试运行一项工作时遇到“找不到方法”的问题吗?
我在问这些问题,因为我想了解所有这些问题背后的真正原因,而不是进行推理。
答
不知道这是否会回答,但我有同样的问题,并发现了几件事情,当你使用Schedule
(或重复的作业)
队列名称的arent支持,只有当你直接
Enqueue
他们(除非你自定义创建一个系统来支持它)。 See this,这是旧的,但应该仍然有效。如果你有多个运行hangfire的服务来管理不同类型的作业,一定要给他们每个人一个不同的hangfire数据库来存储他们的数据。如果你把他们全部放在同一个数据库上,当一个工作需要时启动HF将搜索一个默认队列来运行它(除非你指定了队列名称,但是......见上)。
但是每个服务都会有一个HF服务器,它有一个默认队列,并且没有指出哪一个是正确的......所以HF可能会结束尝试在另一个服务的服务器上运行它,那不会有任何想法因为它没有链接到正确的代码库(again,see this)。另一方面,如果您指定队列的名称,并且该名称只在服务器上“链接”到正确的代码上,那么HF将在该队列上运行该作业(同样,只要您不安排它) ,找到它需要什么,这样就可以了
希望这有助于有点