使用 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 等)
我希望这是有道理的:)
我 运行 遇到这样一种情况,我的应用程序需要将消息发送到位于 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 等)
我希望这是有道理的:)