【问题标题】:RabbitMQ Structure For Private Messaging私有消息传递的 RabbitMQ 结构
【发布时间】:2015-10-18 03:09:48
【问题描述】:

我目前正在寻找构建一个消息服务,用户可以在其中私下发送和接收消息。我可能需要多用户聊天,但在大多数情况下,我只希望单个收件人能够阅读发送给他们的消息。

通过查看 RabbitMQ,使用一个交换器并在每个用户登录时为每个用户创建一个队列并在注销时销毁每个队列是否有意义?为每个用户创建队列是否存在重大性能问题或有更好的替代方案?

我正在构建一个 REST API,并计划让用户通过端点 (/send) 向其他人发送消息,并通过 websockets 或类似的东西订阅他们自己的消息流。我可能也会将消息存储在 MongoDB 中,以便用户可以访问他们以前的所有消息。感谢您对结构提出任何建议。

【问题讨论】:

    标签: rest websocket rabbitmq rabbitmq-exchange


    【解决方案1】:

    我认为你的方法是正确的。如果您将使用默认交换(AMQP 默认),则事件不需要交换。并在登录期间创建一个新队列并保持队列名称与用户名相同。 (只需要确保用户名是唯一的)如果您使用用户名(即:队列名称)作为路由键将消息发布到默认交换,RbbitMQ 只会将该消息路由到该队列。如果您删除队列,则在注销时,用户将在他不在线时错过消息。如果可以,则在登录后创建队列并使用配置独占,即当没有消费者时队列被删除。但是如果您想保留离线消息,那么您需要在用户注册期间永久创建队列。

    【讨论】:

    • 感谢您的建议。我确实想存档所有消息,以及发送用户在重新联机时可能错过的任何消息。我计划将每条消息添加到 MongoDB,然后发送到队列。为用户永久创建数千甚至更多队列是否可行,或者我应该尝试通过 Mongo 处理发送错过的消息?
    猜你喜欢
    • 1970-01-01
    • 2014-02-17
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 2014-08-15
    相关资源
    最近更新 更多