我遇到了一种情况,我的应用程序需要将消息发送到兔子中两个不同虚拟主机中的2个队列,并从其中一个中读取。将这两个队列移动到一个虚拟主机(这是完美的解决方案)是不可能的。因此,我需要在一个进程中运行2个rebus实例。
我使用autofac进行依赖注入。您能否请我重新定位一些资源,解释如何在单个进程中使用autofac在rebus中设置多个实例?
非常感谢你!答案 0 :(得分:1)
您应该将您打算用于在另一个vhost上发送/发布消息的总线实例配置为one-way client,然后您可以通过为此目的创建的专用服务来访问该实例。
有些事情如下:
public class OtherVhostBusClient : IDisposable
{
readonly IBus _bus;
public OtherVhostBusClient(string amqpConnectionString)
{
_bus = Configure.With(new BuiltinHandlerActivator())
.Transport(t => {
t.UseRabbitMqAsOneWayClient(amqpConnectionString);
})
.Start();
}
public Task Publish(object e) => _bus.Publish(e);
public void Dispose() => _bus.Dispose();
}
如果您将OtherVhostBusClient
配置为Autofac容器中的单例,则可以将其注入并使用它在其他虚拟主机上发布内容。
通过这种方式,您实际上将此视为外国网络"各种各样的,实现与它的集成,就像" networks"之间的任何其他类型的集成一样。 (可以是任何其他传输的Rebus,HTTP等)
我希望这是有道理的:)