gpt4 book ai didi

queue - RabbitMQ AMQP队列设计

转载 作者:行者123 更新时间:2023-12-01 10:04:03 26 4
gpt4 key购买 nike

下面是理想的队列设计:

  • P 制作人。插入数据的应用
  • X 交换。
  • C1-C3 消费者。从队列中读取的应用程序

队列详情:

  • A.就像队列日志一样,如果没有客户端绑定(bind),消息将被丢弃。
  • B.这是一个工作队列。如果条件匹配,它将执行某些操作。
  • C.也是一个工作队列。它将转换数据

A 是可选的,但 B.C. 将一直在队列中,直到某个客户端进程连接它。

Desirable queue design

问题是确定我应该使用哪种类型的交换。是扇出、直接还是主题?因为我希望 A 队列在没有客户端连接时丢弃消息,但 B 和 C 应该始终保留消息。

生产者应该向交换器写入一次,还是使用不同的路由键或主题写入多次?

最佳答案

回答问题:我希望所有队列都收到所有消息吗?

如果答案是肯定的,那么您应该使用扇出。如果答案是否定的,那么您应该使用直接或主题。 direct 或 topic 的全部意义在于,队列本身只会根据路由键与绑定(bind)键的匹配来接收消息。

队列 A 应该由消费者 C1 实例化,并设置为自动删除和非持久化。这样,当 C1 断开连接时,队列将被删除,消息将被丢弃。

相反,队列 B 和 C 应该在交换时单独实例化,或者由生产者实例化。应该设置为非自动删除并且可能是持久的。如果您正在使用持久队列,您可能希望拥有持久消息(如果队列 A 不存在,即使持久消息在这里也不是问题,请不要担心)。这样,一旦生产者开始发送消息,队列就会开始排队,不会遗漏任何消息,即使消费者尚未运行也是如此。

是使用直接交换还是主题交换是个人喜好。我知道直接交换应该更快,而主题交换允许路由/绑定(bind)键有很大的灵 active 。

我不是 100% 理解你最后一个问题的意思。每条消息只能写入一次交换。如果使用扇出,交换器将负责将消息正确路由到队列,仅此而已。如果您使用的是直接交换或主题交换,那么它取决于绑定(bind)键,以确保每个队列都收到正确的消息。你不应该需要发送一 strip 有多个路由键的消息,如果你希望做那样的事情,那么你的理解就有些倒退了。但是您可以从一个队列中拥有多个到交换器的绑定(bind)键。

简单的例子。 X是直接交换。 B有黑色的绑定(bind)键,C有一个黑色的绑定(bind)键和一个白色的绑定(bind)键。 P 使用路由键 black 或 white 发送消息。如果是黑色则 B 和 C 都会收到消息,如果是白色则只有 C 会收到消息。

关于queue - RabbitMQ AMQP队列设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12686868/

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