我在使用 Rebus 和延迟消息时遇到了一些问题,如下所示:
bus.AttachHeader(message, "attempt_no", deliveryAttempt + 1);
bus.Defer(TimeSpan.FromMinutes(2), message);
至少有时我会记录这样的错误,我无法解释,我是否必须关注这个问题?
堆栈跟踪
System.ArgumentException: The Rebus transport message ID can not be overwritten.
at Rebus.Bus.RebusBus.AttachHeader(Object message, String key, String value)
at Rebus.Bus.DeferredMessageReDispatcher.DispatchLocal(Object deferredMessage, Guid sagaId, IDictionary`2 headers)
at Rebus.Bus.TimeoutReplyHandler.Handle(TimeoutReply message)
at Rebus.Bus.Dispatcher.<DoDispatch>d__24`1.MoveNext()
更新:
我的设置是我有一个发布/订阅者,如果订阅者失败,我希望它在符合其目的的逻辑问题上重试多次。
所以在订阅者我这样设置,我猜这是这些异常的发起者:
var bus = Configure.With(new WindsorContainerAdapter(container))
.Logging(l => l.NLog())
.Transport(t => t.UseMsmqAndGetInputQueueNameFromAppConfig())
.MessageOwnership(d => d.FromRebusConfigurationSection())
.Timeouts(t => t. StoreInSqlServer(connection.ConnectionString, "Rebus.TimeoutTable").EnsureTableIsCreated())
.CreateBus().Start();
所以我相信这意味着它正在使用内部超时管理器并将其存储在我的 SQL Server 中,这在大多数情况下都可以正常工作,但我仍然不时遇到上述异常。