在自托管时设置NServiceBus端点名称/输入队列

时间:2013-10-14 11:48:40

标签: c# nservicebus

我正在尝试在现有的Windows服务中自托管分销商。 我正在使用MSMQ Transport,以下是如何创建总线:

NServiceBus.Configure.With()
.DefaultBuilder()
.EnlistWithDistributor()
.JsonSerializer()
.UseTransport<Msmq>()
.UnicastBus()
.CreateBus()
.Start();

我需要覆盖默认的Queue名称(自动从Assembly命名空间派生),我试图用以下方式定义EndPointConfig,不幸的是,它没有使Q名称发生变化。

[NServiceBus.EndpointName("custon.queue.name")]
public class EndpointConfig : NServiceBus.IConfigureThisEndpoint, NServiceBus.AsA_Publisher 
{
    public EndpointConfig()
    {
    }
}

配置部分


  <configSections>
    <section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core"/>
    <section name="AuditConfig" type="NServiceBus.Config.AuditConfig, NServiceBus.Core"/>
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>
    <section name="TransportConfig" type="NServiceBus.Config.TransportConfig, NServiceBus.Core"/>
  </configSections>
  <AuditConfig QueueName="audit"/>
  <MessageForwardingInCaseOfFaultConfig ErrorQueue="error"/>
  <TransportConfig MaximumConcurrencyLevel="10" MaxRetries="3" MaximumMessageThroughputPerSecond="10"/>
  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="Protocols" Endpoint="custom.queue.name@localhost"/>
    </MessageEndpointMappings>
  </UnicastBusConfig>



如何覆盖自托管时使用的队列名称?
任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

当自托管时,没有EndpointConfig类 - 配置完全来自您的流畅配置块。您的EndpointConfig类被忽略。

通过流畅的配置,更改端点名称(具体说“更改输入队列”是一个误称 - 它是从端点名称驱动的)是这样完成的:

Configure.With()
    .DefineEndpointName("MyEndpointName")
    // Rest of config

或者如果您希望能够从数据库或配置文件中提取它或做一些花哨的事情......

Configure.With()
    .DefineEndpointName(() =>
        {
            // determine and return endpoint name
        })
    // Rest of config

端点名称对于配置中的其他所有内容都至关重要,因此它应该是fluent配置链中的第一个项目。

另请参阅NServiceBus文档中的How to Specify Your Input Queue