在构建原型时,我一直在使用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在配置学习传输时甚至没有调用它时会抱怨。
答案 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
下跟踪它