RabbitMQ-Spring AMQP【翻译】4.1.2——Queue Affinity and the LocalizedQueueConnectionFactory

版本:2.2.4.RELEASE

队列关联和LocalizedQueueConnectionFactory

当在集群下使用HA队列时,为了更好的性能表现,你可能想连接master队列所在的物理broker。CachingConnectionFactory可以配置多个broker地址。当进行故障切换时,客户端会按顺序尝试连接。LocalizedQueueConnectionFactory使用admin插件提供的REST API来测定master队列在哪个节点。然后它会创建(或从缓存中重用)一个CachingConnectionFactory仅仅连接那一个节点。如果连接失败,则确定新的主节点,并由消费者连接到该节点LocalizedQueueConnectionFactory使用默认连接工厂进行配置,以防止无法确定队列的物理位置时,能够正常的连接到集群。

LocalizedQueueConnectionFactory是一个RoutingConnectionFactorySimpleMessageListenerContainer使用队列名称作为lookup key 正如我们在上一小节所讨论的。

因为使用队列名称作为lookup key,LocalizedQueueConnectionFactory也仅仅被使用在这个容器监听一个队列的场景下。

此连接工厂是用来长期连接,例如SimpleMessageListenerContainer使用的那些连接。它不像rabbittemplate使用的短链接,因为在建立连接前使用REST API的开销很大。此外,对于发布操作,队列是未知的,消息无论如何都会被发布给集群中所有成员,所以查找节点的逻辑没有价值。
下例展示了如何配置这个工厂:

@Autowired
private ConfigurationProperties props;

@Bean
public ConnectionFactory defaultConnectionFactory() {
    CachingConnectionFactory cf = new CachingConnectionFactory();
    cf.setAddresses(this.props.getAddresses());
    cf.setUsername(this.props.getUsername());
    cf.setPassword(this.props.getPassword());
    cf.setVirtualHost(this.props.getVirtualHost());
    return cf;
}

@Bean
public ConnectionFactory queueAffinityCF(
        @Qualifier("defaultConnectionFactory") ConnectionFactory defaultCF) {
    return new LocalizedQueueConnectionFactory(defaultCF,
            StringUtils.commaDelimitedListToStringArray(this.props.getAddresses()),
            StringUtils.commaDelimitedListToStringArray(this.props.getAdminUris()),
            StringUtils.commaDelimitedListToStringArray(this.props.getNodes()),
            this.props.getVirtualHost(), this.props.getUsername(), this.props.getPassword(),
            false, null);
}

请注意,前三个参数是地址、管理员和节点的数组。这些是有位置要求的,因为当容器尝试连接到队列时,它使用管理API来确定队列在哪个节点上被控制,并连接到与该节点位于相同数组位置的地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值