Rabbitmq 发布/订阅时,每条消息都有若干个关键字,每个队列都有若干个他感兴趣的关键字
我有一个相对标准的发布/订阅系统,具有以下要求:Rabbitmq 发布/订阅时,每条消息都有若干个关键字,每个队列都有若干个他感兴趣的关键字,rabbitmq,message-queue,amqp,Rabbitmq,Message Queue,Amqp,我有一个相对标准的发布/订阅系统,具有以下要求: 每条消息包含的主题数量(1到几十个,但通常不超过5个) 每个消费者订阅的主题数量(通常为3-10个) 有数千个主题,数百个消费者和几位制作人 系统必须每秒缩放2000条消息 有时,消费者可以改变他们感兴趣的话题 当然,要求每条消息只到达订阅者一次(即使它包含消费者订阅的几个关键字) 我使用的是RabbitMQ,但我认为这个问题已经足够笼统了 Rabbit拥有的所有exchange类型都不直接支持此模型。若RabbitMQ支持将正则表达式绑定到
- 每条消息包含的主题数量(1到几十个,但通常不超过5个)李>
- 每个消费者订阅的主题数量(通常为3-10个)
- 有数千个主题,数百个消费者和几位制作人李>
- 系统必须每秒缩放2000条消息李>
- 有时,消费者可以改变他们感兴趣的话题李>
- 当然,要求每条消息只到达订阅者一次(即使它包含消费者订阅的几个关键字)李>
我想知道这是否是正确的范例,或者是否存在更规范的方法。路线有多贵?消费者更改订阅时更改绑定的成本有多高?绑定发生更改后,队列中已存在的消息会发生什么情况 简短回答: 路由模型已经足够好了。不要担心rabbitmq性能(尤其是2k/s消息流)。一旦消息进入队列,它将仍然存在,除非它被消耗或死亡(由于ttl或长度限制) 长答案: 我在考虑一个方案,如果客户机对key1、key2和key3感兴趣,它将创建到#.key1.#、#.key2.#和#.key3.#的绑定,并且带有key1和key4的消息的路由键为:.key1.key4。我想知道这是否是正确的范例,或者是否存在更规范的方法 这个主意很好。如果你愿意,你也可以尝试一下,如果你确定你需要他们的力量(如果你不需要的话——坚持主题) 路线有多贵 不必担心主题交换路由性能,它足够快,并且在RabbitMQ代理内部进行了很好的优化 有关详细信息,请阅读,尤其是和 消费者更改订阅时更改绑定的成本有多高 这是一个微不足道的操作,根本不会对性能造成任何影响 绑定发生更改后,队列中已存在的消息会发生什么情况 消息进入队列后,它仍将在那里,除非您使用
basic.get
或basic.consumer
方法或消息获取:
- 消息被拒绝(basic.reject或basic.nack),requeue=false
- 消息的TTL过期;或
- 超出了队列长度限制