在 Rebus 中为自定义重试消息配置队列

Configure a queue for customl retry messages in Rebus

我能够编写自定义重试策略,使用 sql 服务器作为延迟消息存储。但是现在,出于可伸缩性的原因,我想 运行 多个工作人员(消息处理程序任务)部署在不同的机器上。由于这个原因,我希望有一个中心位置来读取延迟消息(比如从队列中)而不是从 sql 服务器读取。

有什么方法可以将延迟的消息存储在队列中吗?这是更好的方法吗?执行此操作的更好方法是什么?

Is there any way to store the deferred messages in a queue? Is that a better approach?

不适用于我熟悉的任何队列 :) 大多数队列都非常擅长 fifo,这与延迟消息冲突,因为延迟可能因每条消息而异(至少在一般情况下是这样例)。

访问消息的顺序可能与发送消息的顺序非常不同,这使得具有二级索引的数据库成为一种非常好的存储延迟消息的技术。

What would be the better approach to do this?

不过,我不确定我是否理解您认为在 SQL 服务器中存储延迟消息有什么问题。

当然,如果您有许多端点延迟消息,您可能希望使用 "external timeout manager" 而不是让每个单独的端点轮询数据库——这可以通过在您的端点中执行此操作来实现:

Configure.With(...)
    .(...)
    .Timeouts(t => t.UseExternalTimeoutManager("timeouts"))
    .Start();

然后简单地启动一个具有配置的超时存储和输入队列的端点 timeouts