gpt4 book ai didi

安慰 - 具有水平可扩展性的保证排序

转载 作者:行者123 更新时间:2023-12-04 02:39:41 24 4
gpt4 key购买 nike

因此在非独占队列中,我们对消息进行了排序(例如,id 123 更新事件将在 id 123 创建事件之后)。当我们只有一个消费者时一切都很好,但需要水平可扩展性。通过产生另一个消费者,我知道代理将在其中进行循环,因此更新事件有可能在其创建事件之前被处理。

是否有关于如何解决此问题的现有模式?我开始知道像 kafka 和 activemq 这样的一些经纪人支持它,通过在发布期间指定 id 它将确保所有具有该 id 的消息只在一个消费者上排队;因此,尊重事件的顺序。

最佳答案

有序消息传递和横向扩展的想法本质上是相互矛盾的。为了实现顺序,必须在使用下一条消息之前完全使用和确认每条消息。这会导致串行 消息处理(即无并发)。然而,水平可伸缩性的想法是通过添加可以并发处理消息的消费者来增加消息吞吐量。如您所见,如果您想要有序的消息处理,则不能同时使用消息,这违背了水平缩放的整个目的。

ActiveMQ(和一般的 JMS)支持您在问题中提到的“消息分组”的想法(同一组中的所有消息共享相同的分组属性 ID 值)。代理选择一个消费者来接收特定组中的所有消息,以便顺序处理消息(即按顺序)。由于只对特定的消息组进行排序,因此可以同时使用来自多个组的消息。但是,队列的基本先进先出语义仍然存在,因此如果您在每个组中有很多消息或少量组,您的整体消费者并发性仍然相当低,而且肯定很多 比你根本不需要订单的情况要低。尽管我在这里专门谈论 ActiveMQ,但对于任何消息代理都没有真正的解决方法,因此同样适用于 Solace(假设它甚至首先支持消息分组)。

关于安慰 - 具有水平可扩展性的保证排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59972850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com