使用NServiceBus设置学习传输时出现RabbitMQ错误

时间:2018-01-30 10:50:42

标签: c# rabbitmq nservicebus

在构建原型时,我一直在使用NServiceBus的学习传输。

然后我添加了RabbitMQ支持,工作正常。

当我(通过app.config)切换回学习传输时,即使没有配置RabbitMQ,我也会收到以下错误

  

System.Collections.Generic.KeyNotFoundException:字典中没有给定的键(RabbitMQ.Routing TopologySupportsDelayedDelivery)

我的学习传输代码如下: -

    public EndpointConfiguration ConfigureEndPoint(ILog logger, ServiceBusConfiguration config)
    {
        try
        {
            // set up server endpoint
            logger.Debug($"Creating server endpoint {config.ServerEndPointName}.");
            var endpointConfiguration = new EndpointConfiguration(config.ServerEndPointName);
            logger.Debug($"Server endpoint {config.ServerEndPointName} created.");
            logger.Debug($"Setting up persistence.");
            endpointConfiguration.UsePersistence<LearningPersistence>();
            logger.Debug($"Persistence set up.");
            logger.Debug($"Setting up transport.");
            endpointConfiguration.UseTransport<LearningTransport>();
            logger.Debug($"Transport set up.");

            endpointConfiguration.EnableInstallers();
            return endpointConfiguration;
        }
        catch (Exception ex)
        {
            logger.Error($"Could not configure service endpoint.", ex);
            throw;
        }
    }

我的RabbitMQ代码是

    public EndpointConfiguration ConfigureEndPoint(ILog logger, ServiceBusConfiguration config)
    {
        try
        {
            // set up server endpoint
            logger.Debug($"Creating server endpoint {config.ServerEndPointName}.");
            var endpointConfiguration = new EndpointConfiguration(config.ServerEndPointName);
            logger.Debug($"Server endpoint {config.ServerEndPointName} created.");
            logger.Debug($"Setting up transport.");
            var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
            //transport.UseConventionalRoutingTopology();
            transport.ConnectionString(config.RabbitMQConnectionString);
            logger.Debug($"Transport set up.");

            endpointConfiguration.EnableInstallers();

            logger.Debug($"Setting up persistence.");
            endpointConfiguration.UsePersistence<InMemoryPersistence>();
            logger.Debug($"Persistence set up.");
            return endpointConfiguration;
        }
        catch (Exception ex)
        {
            logger.Error($"Could not configure service endpoint.", ex);
            throw;
        }
    }

我正在使用NServiceBus v6.4.3和NServiceBus.RabbitMQ v4.4.1

有什么想法吗?

我无法弄清楚为什么RabbitMQ在配置学习传输时甚至没有调用它时会抱怨。

2 个答案:

答案 0 :(得分:2)

简短回答:从扫描中排除RabbitMQ传输dll。

https://docs.particular.net/nservicebus/hosting/assembly-scanning

示例:

scanner.ExcludeAssemblies("NServiceBus.Transports.RabbitMQ");

答案很长:这种行为非常混乱,个人应该由NServiceBus团队修复

答案 1 :(得分:0)

您观察到的问题是由引用RabbitMQ但不使用它的项目的程序集扫描引起的。

在任何情况下,如果项目引用RabbitMQ传输而不选择它作为传输,则从扫描中排除是当前提出的解决方案。

我们会在https://github.com/Particular/NServiceBus.RabbitMQ/issues/471

下跟踪它