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