我使用的是Rebus 0.84,我試圖使用像這樣的自定義標題的Defer方法。Rebus.Defer在超時丟失標題
_theBus.AttachHeader(message, "tenant_id", tenantId);
_theBus.Defer(delay, message);
但是'超時'發生時頭部不存在。這是我的總線配置。
Configure.With(new WindsorContainerAdapter(container))
.Logging(l => l.Serilog())
.Transport(t => t.UseMsmqAndGetInputQueueNameFromAppConfig())
.MessageOwnership(d => d.FromRebusConfigurationSection())
.Timeouts(t => t.Use(new RavenDbTimeoutStorage(container.Resolve<IDocumentStore>())))
.Sagas(x => x.Use(new RavenDbSagaPersister(container.Resolve<IDocumentSession>, session => { })))
.Events(x => x.AddUnitOfWorkManager(new Config.WindsorUnitOfWorkManager(container)))
.CreateBus()
.Start()
這是預期的行爲?這是一個Windows服務,所以我正確設置這是一個單身人士?
編輯 - 我知道發生了什麼更好的主意,我希望它能更好地理解Rebus。
問題是這一行
.Sagas(x => x.Use(new RavenDbSagaPersister(container.Resolve<IDocumentSession>, session => { })))
在我們的應用中使用tenant_id頭球幫助我們連接到該消息的正確的數據庫。如果我更改該行以使用配置爲指向特定數據庫的IDocumentStore,則一切正常。這意味着我的傳奇故事和超時時間存儲在與實際租戶數據庫分開的數據庫中。我可以住這個,但我想了解爲什麼當我使用從容器中檢索到的會話時,標題不存在。我懷疑這是由於爲RavenDbSagaPersister創建會話的時間。那是對的嗎?
編輯2 - 那是錯誤的。該更改仍然無效。使用非常相似的sampel代碼,但使用默認的適配器,超時頭文件很好。我將嘗試通過添加windsor容器適配器來隔離原因。當我可以複製問題時,我會發布代碼鏈接。
難道它與RavenDB存儲有關嗎? – Steven
最終發生在錯誤隊列中的消息實際上是一個「超時回覆」,它幾乎在I bus.defer後立即發生。難道這不是我最初的假設嗎? – Steven
對不起,特別是它的Rebus.Messages.TimeoutRequest – Steven