当前位置: 首页 > 知识库问答 >
问题:

集群ActiveMQ中的负载平衡

宋望
2023-03-14

假设我在一个集群中有3个ActiveMQ Artemis代理:

  1. 经纪人_01

在给定的时间点,我有每个经纪人的消费者数量:

  1. 经纪人有50名消费者

让我们假设在这个给定的时间点,有70条消息要发送到集群中的一个队列。

我们期望集群完成负载平衡,以便Broker_01将接收50条消息,Broker_0210条消息,Broker_0310条消息,但目前我们正在经历70条消息通过所有3个代理随机分发。

是否有任何配置可以根据每个代理中的消费者数量分发消息?

我刚刚读了留档。所以,据我所知,如果我们配置集群连接,ActiveMQ会基于循环进行负载平衡。我们的broker.xml如下所示:

        <cluster-connections>
            <cluster-connection name="my-cluster">
                <connector-ref>amq-v01_connector</connector-ref>
                <min-large-message-size>524288</min-large-message-size>
                <call-timeout>120000</call-timeout>
                <retry-interval>500</retry-interval>
                <retry-interval-multiplier>1.5</retry-interval-multiplier>
                <max-retry-interval>2000</max-retry-interval>
                <use-duplicate-detection>true</use-duplicate-detection>
                <message-load-balancing>ON_DEMAND</message-load-balancing>
                <max-hops>1</max-hops>
                <notification-interval>800</notification-interval>
                <notification-attempts>2</notification-attempts>
                <static-connectors>
                    <connector-ref>amq-v02_connector</connector-ref>
                </static-connectors>
            </cluster-connection>
        </cluster-connections>

此外,队列的地址设置如下所示:

            <address-setting match="MyQueue">
                <address-full-policy>BLOCK</address-full-policy>
                <max-size-bytes>50Mb</max-size-bytes>
            </address-setting>

我是否遗漏了一些东西,以便进行负载平衡?

下一点将如文档中所述,负载平衡总是基于循环进行的,不可能基于每个节点中的使用者数量进行负载平衡的配置。

我假设我需要客户端连接负载平衡,因为我们希望根据每个代理中的消费者数量对到达3个代理的消息进行负载平衡。正如文档中所述,我们可以使用5种开箱即用的策略(循环、第一元素等)。此外,我们还可以通过实施连接负载平衡策略来实施我们自己的策略。假设我想实施我自己的政策,那么根据消费者的数量,我的想法是什么?

共有1个答案

寿丰
2023-03-14

没有现成的方法让制作人知道每个代理上有多少消费者,然后将消息发送给相应的代理。

您可以实施自己的连接负载平衡策略。然而,为了确定队列负载平衡策略实现中存在多少消费者,需要知道集群中所有代理的URL以及向其发送消息的队列的名称,并且无法提供这些信息。连接负载平衡策略界面非常简单。

如果每个节点上的消息太少,我建议您首先重新考虑对3节点集群的需求。在某些用例中,单个代理可以处理数百万条消息的吞吐量。如果每个节点处理的消息少于50条,那么您可能根本不需要集群。

 类似资料:
  • 我们面临着 ActiveMQ - M 集合负载平衡的几个问题。有人可以帮忙吗?以下是我们的设置 MCO在故障转移池-Broker1中配置了两个ActiveMQ代理 经纪人1 问题1:MCO客户端在broker1和broker2之间的负载平衡和连接不相等。700 MCO连接到broker1,而只有100 MCO连接至broker2。我们是否缺少此负载平衡的任何属性? 问题 2: 当我们添加新的代理(

  • 问题内容: 好的,因此我得到了一个非常罕见的负载均衡PHP网站的独特场景。令人讨厌的是-它曾经不是负载均衡的。现在我们开始遇到问题了… 当前唯一的问题是PHP会话。自然,起初没有人想到此问题,因此PHP会话配置保留为默认设置。因此,两个服务器都有自己的少量会话文件存储,而麻烦的是将下一个请求引发到另一个服务器的用户,因为该用户没有在第一个服务器上创建的会话。 现在,我一直在阅读有关如何解决这种情况

  • 我安装了一个kubernetes集群。我想为我的一个微服务使用外部数据库(在我的集群之外),但这个外部数据库被设置为集群,没有自己的负载均衡器。 有没有办法创建一个内部负载平衡器服务,让kubernetes始终将微服务定向到正在运行的实例? 我看到您可以设置loadbalancer类型的服务,我如何使用它?我尝试创建它,但我看到loadbalancer服务是用NodePort创建的。它可以在没有节

  • 包含负载均衡集群及节点。 云联壹云 平台提供的本地IDC的负载均衡功能需要管理员先部署负载均衡集群和LBAgent转发节点。 云联壹云 支持负载均衡多集群功能,用户可根据需求配置负载均衡集群以及集群下的转发节点LBAgent,部署集群和转发节点后才可以部署负载均衡实例等。 集群为一组LBAgent转发节点的集合,同一时刻集群中只有一个转发节点处于MASTER,用于监控负载监控实例配置的IP地址和端

  • 我必须手动在MS Azure中创建Kubernetes群集,而不是使用AKS。因此: > 我在一个可用性集中创建了2个VM:一个用于k8s master,第二个用于k8s节点。 我创建了外部负载均衡器并将2个VM添加到后端池。 我使用kubes祈祷创建了k8s集群。 我创建了部署和负载均衡器服务: 但LoadBalancer服务外部IP始终处于挂起状态: 此外,telnet azure\u loa

  • 我在3个节点上进行了压力测试,但只有一个CPU很高,其他的都很低。Ignite集群使用TCP发现,我有一个jdbc连接,例如:jdbc:Ignite:Thin://172.16.14.15、172.16.14.16、172.16.14.17/