我正在使用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”的队列。
答案 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"))
.(...)
安装了超时管理器后,我敢打赌您的延迟邮件将按原样发送。