Я использую Rebus 0.84, и я пытаюсь использовать метод Defer с настраиваемым заголовком, подобным этому.Rebus.Defer missing header on Timeout
_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, поэтому я правильно настрою ее на одноэлемент?
Редактировать - У меня есть представление о том, что происходит, и я надеюсь, что это приведет к лучшему пониманию Ребуса.
Проблема с этой линией
.Sagas(x => x.Use(new RavenDbSagaPersister(container.Resolve<IDocumentSession>, session => { })))
В нашем приложении мы используем заголовок tenant_id, чтобы помочь нам подключиться к правильной базе данных для этого сообщения. Если я изменю строку, чтобы использовать IDocumentStore, которое настроено для указания на конкретную базу данных, все работает. Это означает, что мои саги и таймауты хранятся в базе данных, которая отделена от фактической базы данных арендатора. Я могу жить этим, но я хотел бы понять, почему заголовок не существует, когда я использую сеанс, извлеченный из контейнера. Я подозреваю, что это связано с сроками создания сеанса для RavenDbSagaPersister. Это верно?
EDIT 2 - Ну, это было ошибкой. Это изменение все еще не работает. Используя очень похожий код sampel, но с адаптером по умолчанию, заголовки тайм-аута отлично работают. Я попытаюсь изолировать причину, добавив адаптер контейнера Windsor. Когда я смогу воспроизвести проблему, я отправлю ссылку на код.
Может ли это иметь какое-либо отношение к хранилищу RavenDB? – Steven
сообщение, которое заканчивается в очереди ошибок, на самом деле является «ответом на таймаут», и это происходит почти сразу после I bus.defer. Может ли это быть чем-то иным, чем мое первоначальное предположение? – Steven
Извините, в частности это Rebus.Messages.TimeoutRequest – Steven