代码之家  ›  专栏  ›  技术社区  ›  Gareth

如何用代码配置nservicebus msmqtransport

  •  6
  • Gareth  · 技术社区  · 16 年前

    我刚从nservicebus开始,在代码中配置msmqtransport时,无法找出缺少的内容。如果我像这样配置发布服务器;

    IBus bus = Configure.With()
                            .CastleWindsorBuilder()
                            .XmlSerializer()
                            .MsmqSubscriptionStorage()
                            .MsmqTransport()
                                .IsTransactional(true)
                                .PurgeOnStartup(false)
                            .UnicastBus()
                                .ImpersonateSender(false)
                            .CreateBus()
                            .Start();
    bus.Publish(new Message(DateTime.Now));
    

    和app.config一样

    
    <configSections>
        <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
    </configSections>
    <MsmqTransportConfig 
        InputQueue="testapps_messagebus" 
        ErrorQueue="testapps_errors" 
        NumberOfWorkerThreads="1" 
        MaxRetries="5" />
    

    然后一切工作正常-它将创建队列,我可以高兴地留言离开,但如果我删除队列,然后再次尝试与这样的代码;

    var config = Configure.With()
                  .CastleWindsorBuilder()
                  .XmlSerializer()
                  .UnicastBus()
                      .ImpersonateSender(false)
                  .MsmqSubscriptionStorage();
    config
        .Configurer
        .ConfigureComponent<MsmqTransport>(NServiceBus.ObjectBuilder.ComponentCallModelEnum.None)
            .ConfigureProperty(x => x.InputQueue, "testapps_messagebus")
            .ConfigureProperty(x => x.NumberOfWorkerThreads, 1)
            .ConfigureProperty(x => x.ErrorQueue, "testapps_errors")
            .ConfigureProperty(x => x.MaxRetries, 5);
    
    IBus bus = config
             .CreateBus()
             .Start();
    
    bus.Publish(new Message(DateTime.Now));
    

    这些消息似乎丢失了,因为它们没有出现在任何队列中,也没有得到处理-我猜我遗漏了一些东西,但我看不到在哪里。

    1 回复  |  直到 8 年前
        1
  •  5
  •   Gareth    16 年前

    哦!提出一个你已经纠结了一段时间的问题,然后休息一下。那么答案当然会击中你,这是非常明显的!我忘了配置msmqtransport,下面是我的工作代码。

    
    Configure config = Configure.With();
    config
        .CastleWindsorBuilder()
        .XmlSerializer()
        .MsmqSubscriptionStorage()
        .MsmqTransport()
            .IsTransactional(true)
            .PurgeOnStartup(false)
        .UnicastBus()
            .ImpersonateSender(false);
    
    config
        .MsmqSubscriptionStorage()
        .Configurer
            .ConfigureComponent(NServiceBus.ObjectBuilder.ComponentCallModelEnum.None)
                .ConfigureProperty(x => x.InputQueue, "testapps_messagebus")
                .ConfigureProperty(x => x.NumberOfWorkerThreads, 1)
                .ConfigureProperty(x => x.ErrorQueue, "testapps_errors")
                .ConfigureProperty(x => x.MaxRetries, 5);
    
    IBus bus = config
                  .CreateBus()
                  .Start();
    
    bus.Publish(new Message(DateTime.Now));
    
    
    推荐文章