我正在创建一个服务(可通过网络和应用访问),用户属于一个团队。每当用户执行某事时,必须通知他/她团队中的所有其他在线用户(*)。我正在评估RabbitMQ。
(*)请注意,同一个用户可能同时有多个会话:他可以同时登录不同的浏览器,或者更有可能同时登录浏览器和应用程序。
我目前的方法是为每个团队创建一个主题交换:
这很好,因为更新消息只能由后端发送一次。但是,这里的问题是发起者也接收他自己的更新。我想避免这种情况。那可能吗?或者我应该有另一种设计吗?
当然,我总是可以在更新消息的有效载荷中添加发起者的用户标识符,并在收到更新消息时对该字段进行过滤,但仍然会收到该消息。
答案 0 :(得分:1)
这是一个有趣的问题。在考虑了这个特定设计的一段时间之后,当用户想要获得更新并进行一些更改而其他人应该知道它时,我觉得你需要考虑其他一些设计。
使用Topic作为Exchange,您将始终在登录系统时创建队列时收到通知。主题将广播它。
主题更多的是订阅类型的东西,你不能轻易指定你想跳过一个订阅的位置。
我能想到的一个有点复杂的设计如下: