簡體   English   中英

不在NServiceBus中自動創建隊列

[英]Not creating queues automatically in 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>

我可以看到一個配置擴展方法來禁用自動創建隊列但沒有啟用它。

如果我預先創建隊列,它工作正常。

自托管時,安裝程​​序不會自動運行。 有關如何手動執行此操作的示例,請參閱asyncpages示例中global.asax.cs

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.x會自動完成。 主機正在按預期自動創建隊列,但不是客戶端(自托管)。

更新:像Andreas,Senor guardo camino所說,你需要像這樣手動調用安裝;

.Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());

這將按預期創建隊列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM