Используемая версия NServiceBus: 2.0.0.1145
Вопрос:
Можно ли настроить хост NServiceBus таким образом, чтобы он потреблял (подчинялся) свои собственные опубликованные сообщения?
Ответ:
Это кажется возможным, но в следующей конфигурации это дает мне исключение блокировки транзакции при попытке вставить подписки в SubscriptionStorage.Это происходит, когда вы используете DbSubscriptionStorage и более 1 «NumberOfWorkerThreads».
Ошибка:
Could not execute command:<br>
INSERT INTO Subscription (SubscriberEndpoint, MessageType) VALUES (@p0, @p1)<br>
System.Data.SqlClinet.SqlException:<br>
Transaction was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
После этого NServiceBus пытается отключиться, но завершается неудачей из-за транзакциивсе еще выполняется и выдает UnhandledException.
Как воспроизвести:
Вот мой App.Config:
<!-- Publishing Configuration -->
<MsmqTransportConfig InputQueue="test_publisher_output" ErrorQueue="test_error" NumberOfWorkerThreads="3" MaxRetries="5" />
<!-- Subscription Configuration -->
<UnicastBusConfig DistributorControlAddress="" DistributorDataAddress="" ForwardReceivedMessagesTo="">
<MessageEndpointMappings>
<add Messages="MessageAssembly" Endpoint="test_publisher_output" />
</MessageEndpointMappings>
</UnicastBusConfig>
My Bus-Configuration:
var bus = Configure.With()
.Log4Net()
.StructureMapBuilder(container)
.XmlSerializer()
.MsmqTransport()
.IsTransactional(true)
.PurgeOnStartup(false)
.DBSubcriptionStorage(subscriptionDbProperties, true)
.Sagas()
.NHibernateSagaPersister(sagaDbProperties, true)
.UnicastBus()
.ImpersonateSender(false)
.LoadMessageHandlers(First<GridInterceptingMessageHandler>
.Then<SagaMessageHandler>())
.CreateBus()
.Start();
и вот мои dbProperties как для подписки, так и для саги:
connection.provider NHibernate.Connection.DriverConnectionProvider
connection.driver_class NHibernate.Driver.SqlClientDriver
dialect NHibernate.Dialect.MsSql2005Dialect
Все работает хорошо, пока я не увеличу NumberOfWorkerThreads выше 1. Все выше, чем это, и это будетВыкиньте вышеуказанные ошибки.
Надеюсь, я ничего не забыл.Заранее спасибо за помощь.