Rebus 延迟消息未被转发

Rebus deferred messages are not being forwarded

我正在使用 RabbitMq as one-way transport 进行主题交流

我在 RabbitMq(我必须手动创建)中配置超时以使用名为 "timeout.queue" 的外部管理器:

configurer.UseExternalTimeoutManager("timeout.queue")

这是向 defer 发送消息的方式:

var timeToSchedule = TimeSpan.FromSeconds(timeToScheduleInSeconds);

var headers = new Dictionary<string, string>
{
    { Headers.DeferredRecipient, "demo.consumer" },
    { Headers.ReturnAddress, "demo.consumer" }
};

await _bus.Defer(timeToSchedule, new EntityScheduled(), headers);

问题是当我延迟消息时,它只是保持超时queue并且没有转发发生。

我也一直在玩 headers 但没有成功。

"demo.consumer" 是 queue 绑定到我的预期主题交换 "defer.topic"

我的猜测是您忘记了基础架构的重要部分:"timeout manager"。

对于 Rebus,"timeout manager" 是配置了超时存储的普通 Rebus 端点

Configure.With(...)
    .(...)
    .Timeouts(t => t.StoreIn(...))
    .(...)

例如

const string localDb = "server=.; database=rebus; trusted_connection=true";

Configure.With(...)
    .(...)
    .Timeouts(t => t.StoreInSqlServer(localDb, "RebusTimeouts"))
    .(...)

在你的情况下,它会是这样的:

const string localDb = "server=.; database=rebus; trusted_connection=true";

Configure.With(...)
    .Transport(t => t.UseRabbitMq(rabbitConn, "timeout.queue"))
    .Timeouts(t => t.StoreInSqlServer(localDb, "RebusTimeouts"))
    .(...)

安装超时管理器后,我敢打赌您的延迟消息将按原样发送。