我已经运行 masstransit / msmq 一段时间了,没有任何问题,使用它从 asp.net mvc 应用程序向 Windows 服务发送消息。
我的全局 asax 在 OnApplicationStarted 事件中包含以下内容:
MessageBus = ServiceBusFactory.New(sbc =>
{
sbc.UseMsmq();
sbc.VerifyMsmqConfiguration();
sbc.UseMulticastSubscriptionClient();
sbc.ReceiveFrom("msmq://localhost/websiteQueue");
sbc.Subscribe(subs =>
{
});
});
请注意,此总线配置为仅发送消息,它不接收任何内容。这个很重要。
最近我们在 IIS 中实现了一个网络花园。这是当您将工作进程的数量增加到超过 1 时。它通过旋转站点的多个副本为您获得一些性能。这就是问题所在。
Masstransit 只允许每个队列有一个实例,并且自从我们创建了我们的网络花园以来,消息传递就间歇性地停止工作。我猜它有时会起作用,因为我很幸运能够通过主动访问队列来访问站点实例。
但是就像我之前提到的,队列无论如何都没用,我从不使用它来接收任何东西。我想知道是否有某种方法可以将其转换为仅发送总线,在那里我发布消息但从不接收它们?
在短时间内,我在队列名称的末尾添加了一个 Guid.NewGuid(),它确实开始工作了。唯一的问题是每次我们重新启动站点时它都会创建 10 个新队列。这显然不是真正的永久解决方案。