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

Xmpp 哪种解决方案能够更好地处理发布者/订阅者场景?,xmpp,rabbitmq,publish-subscribe,amqp,apache-kafka,Xmpp,Rabbitmq,Publish Subscribe,Amqp,Apache Kafka,这个场景是publisher/subscriber,我正在寻找一个解决方案,它可以让一个生产者跨多个消费者实时发送一条消息。一个解决方案可以处理的重量越轻越好 在AMQP服务器的情况下,我只签出了Rabbitmq并使用Rabbitmq server for pub/sub模式,每个使用者都应该声明一个匿名的私有队列并将其绑定到扇出交换,因此,在数千个用户实时消费一条消息的情况下,Rabbitmq将处理数千个左右的匿名队列 但我真的不喜欢rabbitmq的方法,如果rabbitmq能够处理一个队列

这个场景是publisher/subscriber,我正在寻找一个解决方案,它可以让一个生产者跨多个消费者实时发送一条消息。一个解决方案可以处理的重量越轻越好

在AMQP服务器的情况下,我只签出了Rabbitmq并使用Rabbitmq server for pub/sub模式,每个使用者都应该声明一个匿名的私有队列并将其绑定到扇出交换,因此,在数千个用户实时消费一条消息的情况下,Rabbitmq将处理数千个左右的匿名队列

但我真的不喜欢rabbitmq的方法,如果rabbitmq能够处理一个队列、一条消息、多个消费者在一个队列上侦听的发布/订阅场景,那将是理想的

我想问的是,哪种AMQP服务器或其他类型的解决方案(任何类似的解决方案,包括XMPP服务器或Apache Kafka或…)比RabbitMQ更好、更高效地处理发布/订阅模式/场景,同时消耗(当然)更少的服务器资源

按兴趣顺序排列的偏好:

  • 在启用AMQP的情况下,服务器处理只有一个或更少数量队列的发布/订阅场景(如所述)

  • 以轻量级的方式处理数千个消费者,与pub/sub模式中的其他解决方案相比,消耗更少的服务器资源

  • 集群,容忍节点故障

  • 许多语言绑定(至少是Python和Java)

  • 易于使用和管理

  • 我知道我的问题可能很笼统,但我喜欢听到关于酒吧/酒吧案例的想法和建议


    谢谢。

    一般来说,对于
    RabbitMQ
    ,如果您将用户放入
    路由键
    ,您应该能够使用单个
    交换
    ,然后使用少量
    队列
    (如果您愿意,甚至可以是一个,但您可以按服务器或类似的方式将它们分开,如果您的设置合理的话)

    如果您不需要
    保证顺序
    (比如说,保证FK约束不会因为对各种SQL数据库表的一系列更改而受到影响),那么就没有理由不能让一群
    使用者从单个队列中绘制

    如果您想要一种广播消息类型的场景,那么处理方式可能会有所不同。除了可以用于非广播类型消息的
    路由键
    中的单个用户之外,您还可以使用一种特殊的用户类型,比如说,\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,没有用户可以实际拥有,并且拥有要广播的用户与消息本身一起存储在消息的有效负载中

    然后,您的消息处理代码可以负责将该消息存放在所有这些用户的数据库(或任何最终目的地)中

    根据OP的评论进行编辑:

    因此,
    路由键
    可能看起来像这样的消息。[user]其中,[user]可能是实际用户,如果它是点对点消息,并且是一个特殊的\uuuuuuuuuuuuuuuuuuuuuuuuuu用户(或实际用户不允许注册的类似用户名)这将指示广播风格的消息


    然后,您可以在消息的
    有效载荷
    中放置消息应发送给的用户,然后将该消息内容(也将在
    有效载荷
    中)可以发送给每个用户。这样做的机制取决于您的最终目的地是什么。例如,消息是否最终存储在
    Postgres
    、或
    Mongo DB
    或类似文件中?

    您能更准确地说吗?您所说的
    将用户放入路由键中是什么意思?我不知道它与交换的关系e和少量队列。如果您能解释得更多,我们将不胜感激。如前所述,场景是通过单个队列向所有消费者发送一条消息,确保所有消费者都收到该消息的副本,以及之后的消息。如果您可以指向任何类型的文档,也可以。顺便说一下,t谢谢你的回答:)上面澄清了;还需要询问消息的最终目的地是什么。