Подтвердить что ты не робот

Автоматическое создание очередей в 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>

Я могу увидеть способ расширения конфигурации, чтобы отключить автоматическое создание очередей, но ни один из них не включил его.

Если я предварительно создаю очереди, он отлично работает.

4b9b3361

Ответ 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());

Это создаст очереди, как ожидалось.