使用autofac为单个进程配置多个rebus实例

时间:2017-10-23 09:38:45

标签: rabbitmq autofac rebus

我遇到了一种情况,我的应用程序需要将消息发送到兔子中两个不同虚拟主机中的2个队列,并从其中一个中读取。将这两个队列移动到一个虚拟主机(这是完美的解决方案)是不可能的。因此,我需要在一个进程中运行2个rebus实例。

我使用autofac进行依赖注入。您能否请我重新定位一些资源,解释如何在单个进程中使用autofac在rebus中设置多个实例?

非常感谢你!

1 个答案:

答案 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等)

我希望这是有道理的:)