NServiceBus没有创建RabbitMQ队列

时间:2015-04-23 09:09:09

标签: c# rabbitmq nservicebus

我有一个问题,NServiceBus不会自动创建所有队列。

如果我运行任何端点(不包括mvc Web客户端),我会收到以下错误。 (端点是使用ServiceMatrix生成的)

  

2015-04-23 10:50:12.241 ERROR NServiceBus此端点无法执行此操作   联系ServiceControl后端以报告端点信息。   您已在端点中安装了ServiceCont rol插件。   但是,请确保Particul ar ServiceControl服务   安装在这台机器上,或者如果在一台机器上运行ServiceCon trol   不同的机器,然后确保您的端点的app.config / web.c   onfig,AppSettings具有以下适当的键设置:   ServiceControl / Queue。例如:其他详细信息:{0}   NServiceBus.Unicast.Queuing.QueueNotFoundException:Exchange for   收件人不存在--->   RabbitMQ.Client.Exceptions.AlreadyClosedException:已经被封闭:   AMQP操作被中断:AMQP关闭原因,由   同行,代码= 404,text =“NOT_FOUND - 无交换   vhost'/'“中的'special.servicecontrol',classId = 60,methodId = 40,   cause = at RabbitMQ.Client.Impl.ModelBase.WaitForConfirms(TimeSpan)   超时,布尔& TIMEDOUT)...

所以似乎没有创建special.servicecontrol。但是其他队列确实已创建。

如果我运行web项目,我也会遇到异常:{“无法访问已处置的对象。\ r \ n对象名称:'CommonObjectBuilder'。”}。 “Bus.Create(config)”上发生此错误,并且未创建任何队列。

if (Debugger.IsAttached)
{   

    config.UsePersistence<InMemoryPersistence>();

    config.EnableInstallers();
}

var bus = Bus.Create(config);

如果我手动将special.servicecontrol添加到队列中,则所有错误都会消失。

1 个答案:

答案 0 :(得分:0)

所以最后基本上我的错误是没有更新我的ServiceControl来使用RabbitMQ。

当发生这种情况时,NServiceBus不会很好地使用正确的错误消息。实际上,ServiceControl负责创建特定的.servicecontrol队列,当这个队列丢失时,总线本身的所有地狱都会崩溃。

然而,它并不像Multi Transport installation documentation中所讨论的那么简单。简而言之,虽然NSB5与RabbitMQ v2.1.2(最新稳定版)配合使用,但ServiceControl二进制文件需要v1.1.5。因此,必须从&#34; RabbitMQ.Client v3.2.1&#34;中复制二进制文件。和#34; RabbitMQ v2.1.2&#34; nuget包在&#34; C:\ Program Files(x86)\ Particular Software \ ServiceControl&#34;否则一个人

  

传输配置失败。无法解析类型   &#39; NServiceBus.RabbitMQ,NServiceBus.Transports.RabbitMQ&#39;来自设置   &#39; TransportType&#39 ;.确保组件存在且类型为   在设置中正确定义

为RabbitConQ运行ServiceControl的安装时。

我找到了解决方案here