我有一个问题,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添加到队列中,则所有错误都会消失。
答案 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。