У нас есть достаточное количество сервисов, которые мы уже разработали с помощью NServiceBus, и мы как раз находимся в процессе перехода от использования транспорта MSMQ к использованию транспорта SQL Server.
Для услуг NSB Hosted это было относительно просто. Но у нас возникла проблема с настройкой некоторых наших веб-сайтов (веб-API asp.net).
Мы самостоятельно размещаем веб-сайты со следующей конфигурацией:
NServiceBus.Configure.Serialization.Xml();
var bus = NServiceBus.Configure.With(/* specific assemblies */)
.CastleWindsorBuilder(container)
.DefineEndpointName(
ConfigurationManager.AppSettings["nsb:EndpointName"])
.DefiningCommandsAs(t =>
t.GetCustomAttributes(typeof(/* our marker */), false)
.GetLength(0) > 0)
.DefiningEventsAs(t =>
t.GetCustomAttributes(typeof(/* our marker */), false)
.GetLength(0) > 0)
.SetEndpointSLA(new TimeSpan(0,10,0))
.UseNHibernateTimeoutPersister()
.UseNHibernateSubscriptionPersister()
.UseTransport<SqlServer>() //<-- Changed here
.UnicastBus()
.LoadMessageHandlers()
//.DoNotCreateQueues() //We create queues manually.
.CreateBus()
;
Единственные строки, которые я изменил, это строка UseTransport<>
(у которой ранее было Msmq
) и, временно, строка .DoNotCreateQueues()
, потому что я хотел заставить ее создавать таблицы очереди (пока я работаю локально под IIS Express)
Проблема в том, что когда он создает таблицы очереди, он добавляет имя моей машины к имени «базовой» таблицы. т.е. таблицы, которые он создает (когда параметр приложения EndpointName
равен Service.Name
), имеют форму:
Service.Name.MYMACHINENAME
Service.Name.Retries
Service.Name.Timeouts
Service.Name.TimeoutsDispatcher
Принимая во внимание, что когда он создает очереди MSMQ, он создает:
Service.Name
Service.Name.Retries
Service.Name.Timeouts
Service.Name.TimeoutsDispatcher
И действительно, подписчики, которые уже были обновлены до транспорта SQL Server, ищут таблицу очереди Service.Name
для регистрации своих подписок.
Что я делаю неправильно или какая другая информация требуется для решения этой проблемы?