【发布时间】:2021-01-18 17:09:08
【问题描述】:
我创建了一个带有两个活动代理的 ActiveMQ Artemis 集群。我创建了一个自定义负载均衡器,以便能够根据我的要求和工作负载以静态方式最初分配我的队列。
<connectors>
<connector name="broker1-connector">tcp://myhost1:61616</connector>
<connector name="broker2-connector">tcp://myhost2:62616</connector>
</connectors>
<cluster-connections>
<cluster-connection name="myhost1-cluster">
<connector-ref>broker1-connector</connector-ref>
<retry-interval>500</retry-interval>
<use-duplicate-detection>true</use-duplicate-detection>
<message-load-balancing>ON_DEMAND</message-load-balancing>
<max-hops>1</max-hops>
<static-connectors>
<connector-ref>broker2-connector</connector-ref>
</static-connectors>
</cluster-connection>
</cluster-connections>
我的问题是,当 broker1 关闭时,基于此拓扑,我可以在 broker2 上重新创建其队列以避免丢失消息(通过在生产者 (tcp://myhost1:61616,tcp://myhost2:62616) 上使用连接字符串)。
但是当 broker1 再次可用时,我的生产者并没有意识到这一点,它仍然使用到 broker2 的连接(如果这很重要,broker2 redistribution-delay 设置为 0 并且没有注册消费者)。有没有办法或一些配置来恢复我的生产者只写给broker1。
这会影响我最初连接到 broker1 的消费者,我不确定是否还有某种方式/配置可以使它们在这些代理之间透明地反弹,或者我是否需要创建两个消费者(实际上其中一个将处于空闲状态) 每一个都针对相应的代理?
【问题讨论】:
-
您是否进行了性能基准测试以确定您确实需要一个由 2 个代理组成的集群?
-
实际上我即将进行性能测试。我的主要问题是我将在某个时间点安排几十万条消息(约 1/4 百万)。我需要能够尽快解决这个问题,因为我有 2 个代理可用,集群解决方案似乎是安全的方法
-
如果你还没有测试,你怎么知道消息的数量是否真的是一个问题?此外,整体性能更有可能与您拥有的消费者和生产者的数量相关。 ActiveMQ Artemis 可以很好地扩展大量客户端,但如果您只有几个生产者和消费者连接,那么这将是您的性能瓶颈。
-
另外,不清楚您所说的“我将在某个时间点安排几十万条消息(约 1/4 万条)”是什么意思。这是否意味着消息已经在队列中并计划在特定时间传递?这是否意味着生产者被安排在特定时间将这些消息发送到队列?另外,您所说的“我需要能够尽快应对”是什么意思?您是说您需要满足项目截止日期,还是需要经纪人/客户尽快处理消息?
-
好吧,我最初的假设是,如果我可以拥有两个代理,我可以更轻松地扩展我的负载。在一个节点上拥有多个消费者和生产者会对性能产生影响。
标签: activemq-artemis