Не создавать очереди автоматически в NServiceBus - PullRequest
13 голосов
/ 02 февраля 2012

Я использую 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>

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

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

Ответы [ 2 ]

15 голосов
/ 02 февраля 2012

Установщики не запускаются автоматически при самостоятельном размещении.Пожалуйста, посмотрите 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());
11 голосов
/ 02 февраля 2012

Я справился с этим, создав очередь вручную на стороне клиента (которая является собственной).

Не уверен, но я думал, что 2.x сделал это автоматически.Хост создает очереди автоматически, как и ожидалось, но не клиент (самостоятельно размещенный).

ОБНОВЛЕНИЕ: Как и Андреас, сеньор guardo camino, заявил, что вам нужно вызвать установку вручную, как это;*

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

...