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

Configure multiple instances of rebus for a single process with autofac

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

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

非常感谢!

您应该配置总线实例,您打算将其用于 send/publish 另一个虚拟主机上的消息,作为 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 容器中的单例,您可以将其注入并使用它在另一个虚拟主机上发布内容。

这样,您基本上将其视为某种 "foreign network",实现与它的集成,就像 "networks" 之间的任何其他类型的集成一样(可以是任何其他传输上的 Rebus 、HTTP 等)

我希望这是有道理的:)