Автоматическое создание очередей в NServiceBus
Я запускаю NServiceBus 3.0.0 rc2, но когда я запускаю приложение (как локальный администратор) без предварительного создания MSMQ, это ошибки:
Очередь не существует или у вас недостаточно полномочий для выполнения операции.
Это не происходило с использованием NServiceBus 2.6.
Ниже моя конфигурация:
var bus = Configure.With()
.Log4Net()
.NinjectBuilder()
.XmlSerializer()
.DefiningCommandsAs(t => typeof(ICommand).IsAssignableFrom(t))
.DefiningEventsAs(t => typeof(IEvent).IsAssignableFrom(t))
.DefiningMessagesAs(t => typeof(IMessage).IsAssignableFrom(t))
.MsmqTransport()
.DefineEndpointName("subscriber.input")
.IsTransactional(true)
.PurgeOnStartup(false)
.UnicastBus()
.LoadMessageHandlers()
.ImpersonateSender(false)
.CreateBus()
.Start();
и
<configuration>
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
</configSections>
<MsmqTransportConfig ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="MyEvents" Endpoint="publisher.input" />
</MessageEndpointMappings>
</UnicastBusConfig>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
Я могу увидеть способ расширения конфигурации, чтобы отключить автоматическое создание очередей, но ни один из них не включил его.
Если я предварительно создаю очереди, он отлично работает.
Ответы
Ответ 1
Установщики не запускаются автоматически при самообслуживании. См. global.asax.cs в примере asyncpages для примера о том, как это сделать вручную.
using NServiceBus
using NServiceBus.Installation.Environments
...
Bus = Configure.With()
.Log4Net()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(false)
.PurgeOnStartup(false)
.UnicastBus()
.ImpersonateSender(false)
.CreateBus()
.Start(() => Configure.Instance.ForInstallationOn<Windows>().Install());
Ответ 2
Я обошел это, создав очередь на стороне клиента вручную (которая сама организована).
Не уверен, но я подумал, что 2.x сделал это автоматически.
Хост создает очереди автоматически, как и ожидалось, но не клиент (самостоятельно размещен).
ОБНОВЛЕНИЕ: Как и Андреас, senor guardo camino, заявил, что вам нужно вызвать установку вручную так:
.Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());
Это создаст очереди, как ожидалось.