我在使用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中,这在大多数情况下都是假设的,但我仍然不时得到上述异常。