【问题标题】:ActiveMQ Artemis configure standalone brokers with failover and statically assigned queuesActiveMQ Artemis 为独立代理配置故障转移和静态分配的队列
【发布时间】:2021-01-19 04:15:16
【问题描述】:

我正在尝试弄清楚如何利用 ActiveMQ Artemis 来实现以下拓扑。我确实需要让多个生产者写入托管在两个独立 Artemis 代理上的队列。目前,每个生产者创建两个连接工厂,它们处理与 2 个代理的连接并创建相应的队列。

    @Bean
    public ConnectionFactory jmsConnectionFactoryBroker1() {
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerUrl_1,username,password);
        return connectionFactory;
    }

    @Bean
    public ConnectionFactory jmsConnectionFactoryBroker2() {
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerUrl_2,username,password);
        return connectionFactory;
    }

我的主要问题是我需要知道哪个队列分配给哪个代理,同时我需要知道如果一个代理由于某种原因关闭,我可以重新创建该队列到另一个代理飞并避免丢失任何进一步的消息。所以我的方法是设置代理网址如下

artemis.brokerUrl_1=(tcp://myhost1:61616,tcp://myhost2:61616)?randomize=false
artemis.brokerUrl_2=(tcp://myhost2:61616,tcp://myhost1:61616)?randomize=false

因此,为每个代理 url 使用不同的 JmsTemplate 我的意图是当提到 JmsTemplate 使用 brokerUrl_1 将在 myhost1 上创建队列,对应的 JmsTemplate 也是如此 为brokerUrl_2

我本来预计(由于随机化参数)每个队列都会对代理具有某种静态成员资格,并且在代理失败的情况下,会通过从头开始重新创建队列来进行某种迁移另一个经纪人。

相反,我注意到几乎每次队列创建的分布都不会像想象的那样发生,而是随机发生,因为同一个队列可能出现在任一代理中,这是不可取的 对于我的用例。

我如何处理这种情况并解决我的问题,我可以在预定义的代理上创建我的队列并具有故障安全,如果一个代理关闭,生产者将创建相同的队列到 其他经纪人并继续?

请注意,在代理之间共享状态不是一种选择

【问题讨论】:

  • 你使用的是什么客户端库?
  • 我使用 Spring Boot JmsTemplate 和连接工厂org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory (org.springframework.boot:spring-boot-starter-artemis)

标签: activemq-artemis


【解决方案1】:

randomize=false 不适用于 Artemis 核心 JMS 客户端。它仅适用于随 ActiveMQ 5.x 分发的 OpenWire JMS 客户端。从 URL 中选择哪个连接器由the documentation 中讨论的连接负载平衡策略确定。默认连接负载平衡策略是org.apache.activemq.artemis.api.core.client.loadbalance.RoundRobinConnectionLoadBalancingPolicy,它将从 URL 列表中选择一个 random 连接器,然后是循环连接。还有其他可用的策略,如果它们都没有提供您想要的行为,那么您可以实施自己的策略。

也就是说,听起来您真正想要/需要的是 2 个 代理,其中每对都由一个实时和一个备份组成。这样,如果实时代理发生故障,那么所有客户端都可以故障转移到备份,您将不必处理您尝试实施的这种“假”故障转移功能的任何其他复杂性。

此外,由于您使用的是 Spring 的 JmsTemplate,因此您应该使用它使用的 be aware of some well-known anti-patterns,这可能会对性能产生负面影响。

【讨论】:

    猜你喜欢
    • 2021-02-15
    • 1970-01-01
    • 2015-05-03
    • 2021-10-13
    • 2020-06-09
    • 2015-06-27
    • 1970-01-01
    • 2022-01-04
    • 2011-09-19
    相关资源
    最近更新 更多