【问题标题】:RabbitHutch.CreateBus() only allows to connect to one RabbitMQ serverRabbitHutch.CreateBus() 只允许连接到一个 RabbitMQ 服务器
【发布时间】:2018-03-27 18:38:04
【问题描述】:

我有一个应用程序需要连接到 2 个不同的 RabbitMQ 服务器。调用 RabbitHutch.CreateBus(connectionString1) 和 RabbitHutch.CreateBus(connectionString2) 都返回一个连接到 connectionString1 的 IBus。我实施了这种解决方法,但我想从社区中了解是否有更好的方法来实现这一点,或者我的方法是否有效。

var connectionFactory = container.Resolve<IConnectionFactory>();
var logger = container.Resolve<IEasyNetQLogger>();
var eventBus = container.Resolve<IEventBus>();
var connectionConfiguration = container.Resolve<ConnectionConfiguration>();
var persistentConnectionFactory = container.Resolve<IPersistentConnectionFactory>();
var clusterHostSelectionStrategy = container.Resolve<IClusterHostSelectionStrategy<ConnectionFactoryInfo>>();
// override these objects to connect to a different RabbitMQ server
connectionConfiguration = (new ConnectionStringParser()).Parse(configuration["spring:cloud:bus"]);
connectionFactory = new ConnectionFactoryWrapper(connectionConfiguration, clusterHostSelectionStrategy);
persistentConnectionFactory = new PersistentConnectionFactory(logger, connectionFactory, eventBus);
_bus = new RabbitAdvancedBus(
    connectionFactory,
    container.Resolve<IConsumerFactory>(),
    logger,
    container.Resolve<IClientCommandDispatcherFactory>(),
    container.Resolve<IPublishConfirmationListener>(),
    eventBus,
    container.Resolve<IHandlerCollectionFactory>(),
    container,
    connectionConfiguration,
    container.Resolve<IProduceConsumeInterceptor>(),
    container.Resolve<IMessageSerializationStrategy>(),
    container.Resolve<IConventions>(),
    container.Resolve<AdvancedBusEventHandlers>(),
    persistentConnectionFactory);

【问题讨论】:

    标签: c# rabbitmq easynetq


    【解决方案1】:

    您使用的是哪种 DI 实现?

    您可以创建 2 个容器吗?所有总线组件都注册为单例,我不想在 2 个总线实例之间共享它们。

    或者,您可以尝试从根容器创建 2 个子作用域,并在每个容器中注册不同的总线实例。

    【讨论】:

    • 您能否添加有关如何为每个连接注册不同容器的示例代码?我看到 RabbitHutch.SetContainerFactory() 但它不能处理这种情况
    • 我意识到 CreateBus() 的默认行为是每次都创建一个新容器,无论它是否是相同的连接字符串。我必须更改我的代码,以便为调用最常见的服务器提供一个默认容器实例,并让它在使用其他连接字符串时创建一个新容器。
    猜你喜欢
    • 2015-04-22
    • 2013-06-07
    • 2014-01-17
    • 2012-11-12
    • 2014-04-02
    • 1970-01-01
    • 2013-06-27
    • 2017-10-09
    • 2012-06-07
    相关资源
    最近更新 更多