哪种解决方案能更好地处理发布者/订户场景?

niwlg2el  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(328)

这个场景是publisher/subscriber,我正在寻找一个解决方案,它可以让一个生产者跨多个消费者实时发送一条消息。一个解决方案可以处理的重量越轻越好!
在amqp服务器的情况下,我只 checkout 了rabbitmq,并使用rabbitmq服务器进行pub/sub模式,每个使用者都应该声明一个匿名的私有队列,并将其绑定到fanout交换,因此在数千个用户实时消费一条消息的情况下,rabbitmq将有数千个左右的匿名队列处理。
但是我真的不喜欢rabbitmq的方法,如果rabbitmq能够处理一个队列、一条消息、多个消费者在一个队列上侦听的pub/sub场景,那就太理想了!
我想问的是,哪种amqp服务器或其他类型的解决方案(任何类似的解决方案,包括xmpp服务器或apache kafka或……)比rabbitmq更好地处理发布/子模式/场景,并且更高效地消耗(当然)更少的服务器资源?
按兴趣顺序排列的偏好:
在启用amqp的情况下,服务器处理pub/sub场景时,只有一个或更少的队列(如所述)
以轻量级的方式处理数千个使用者,与pub/sub模式中的其他解决方案相比消耗更少的服务器资源
群集,容忍节点故障
许多语言绑定(至少是python和java)
易于使用和管理
我知道我的问题可能很笼统,但我喜欢听听关于酒吧/酒吧案例的想法和建议。
谢谢。

yzckvree

yzckvree1#

一般来说 RabbitMQ ,如果将用户放入 routing key ,您应该能够使用单个 exchange 然后是一小部分 queue s(即使是一个单独的,如果你想,但你可以分为服务器或类似的,如果这是有意义的给你的设置)。
如果你不需要 guaranteed order (比如说,保证fk约束不会因为对各种sql数据库表的一系列更改而受到影响),那么就没有理由不能有一堆 consumers 从单个队列绘制。
如果您想要一种广播消息类型的场景,那么可能会有点不同的处理方式。而不是 routing key ,您可以将其用于非广播类型的消息,它有一个特殊的用户类型,例如,\u broadcast,\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。
然后,您的消息处理代码可以负责将该消息存放在所有这些用户的数据库(或任何最终目的地)中。
根据op的评论进行编辑:
所以 routing key 可能类似于此消息。[user],其中[user]可能是实际用户(如果它是点对点消息)和特殊的广播用户(或实际用户不允许注册的类似用户名),这将指示广播样式的消息。
然后,您可以将消息应传递到的用户放置在 payload 然后是消息内容(也将在 payload )可以传递给每个用户。这样做的机制取决于你的最终目的地是什么。i、 e.信息最终是否会存储在 Postgres ,或 Mongo DB 还是类似的?

相关问题