2

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

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

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

4

1 回答 1

1

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

于 2015-07-28T14:47:19.280 回答