RabbitMQ - 如何避免收到自己的消息
RabbitMQ - how to avoid to receive own messages
我正在创建一项服务(可通过网络和应用程序访问),其中用户属于一个团队。每当用户做 某事 时,必须通知 his/her 团队中的所有其他在线用户 (*)。我正在为此评估 RabbitMQ。
(*)注意,同一个用户有可能同时有多个session:他可能同时登录不同的浏览器,或者更有可能同时登录浏览器和app时间.
我目前的做法是为每个团队创建一个话题交流:
- 当用户登录时,将创建一个自动删除队列并绑定到 his/her 团队的交换。
- 用户更新后,后台发送消息给对应团队的交易所
- 最后,所有活动队列 - 即所有活动会话 - 收到更新消息。
这很好,因为更新消息只能由后端发送一次。然而,这里的问题是发起者也接收到他自己的更新。我想避免这种情况。那可能吗?还是我应该换个设计?
当然,我总是可以在更新消息的负载中添加发起者的用户标识符,并在收到更新消息时对该字段进行过滤,但仍然收到消息。
这是一个有趣的问题。这个设计考虑了一段时间,当用户想要获取更新并进行一些更改,而其他人应该知道时,我觉得你需要考虑一些其他设计。
使用主题作为交换,您将始终在登录系统时创建队列时收到通知。 Topic 将广播它。
该主题更多是针对订阅类内容,您无法轻松指定要在何处跳过订阅。
我能想到的一个有点复杂的设计如下:
- 为团队中的每个人创建一个主题交换。
- 当另一个用户登录时,他将订阅所有其他团队成员的交换。
- 当用户进行更新时,它会被发送到他自己的 Exchange,所有其他人都在收听。
- 这样用户在收听其他主题时不会得到自己的更新。
我正在创建一项服务(可通过网络和应用程序访问),其中用户属于一个团队。每当用户做 某事 时,必须通知 his/her 团队中的所有其他在线用户 (*)。我正在为此评估 RabbitMQ。
(*)注意,同一个用户有可能同时有多个session:他可能同时登录不同的浏览器,或者更有可能同时登录浏览器和app时间.
我目前的做法是为每个团队创建一个话题交流:
- 当用户登录时,将创建一个自动删除队列并绑定到 his/her 团队的交换。
- 用户更新后,后台发送消息给对应团队的交易所
- 最后,所有活动队列 - 即所有活动会话 - 收到更新消息。
这很好,因为更新消息只能由后端发送一次。然而,这里的问题是发起者也接收到他自己的更新。我想避免这种情况。那可能吗?还是我应该换个设计?
当然,我总是可以在更新消息的负载中添加发起者的用户标识符,并在收到更新消息时对该字段进行过滤,但仍然收到消息。
这是一个有趣的问题。这个设计考虑了一段时间,当用户想要获取更新并进行一些更改,而其他人应该知道时,我觉得你需要考虑一些其他设计。
使用主题作为交换,您将始终在登录系统时创建队列时收到通知。 Topic 将广播它。
该主题更多是针对订阅类内容,您无法轻松指定要在何处跳过订阅。
我能想到的一个有点复杂的设计如下:
- 为团队中的每个人创建一个主题交换。
- 当另一个用户登录时,他将订阅所有其他团队成员的交换。
- 当用户进行更新时,它会被发送到他自己的 Exchange,所有其他人都在收听。
- 这样用户在收听其他主题时不会得到自己的更新。