中继转发的延迟消息未转发

时间:2019-03-05 20:50:00

标签: .net rebus rebus-rabbitmq

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

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

configurer.UseExternalTimeoutManager("timeout.queue")

这是发送邮件要推迟的方式:

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);

问题在于,当我推迟邮件时,它只保存在超时队列中,并且没有转发。

我也一直在玩标题,但没有成功。

“ demo.consumer”是绑定到我预定的主题交换“ defer.topic”的队列。

1 个答案:

答案 0 :(得分:1)

我的猜测是您已经忘记了基础架构的重要组成部分:“超时管理器”。

使用Rebus,“超时管理器”是配置了超时存储的普通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"))
    .(...)

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