引用:wx_PzhXHaGK 发表于 2021-06-17 11:58 你说的这种情况,就只能依赖客户端的去重策略了 |
引用:JackJiang 发表于 2021-06-17 11:33 1. serverA和serverB 从 rocketmq 均拉取到 消息M 2. clientA 收到了serverA推送的消息M 3. clientA 断连,重连到 serverB 此时serverB上消息M可能还没有被处理 4. clientA接收到serverB推送的消息M |
引用:wx_PzhXHaGK 发表于 2021-06-17 11:22 接收两次?你理解的是怎么发生接收两次的? |
rocketmq广播到consumer之后,各个consumer的消费速度是不一样的。 在这种情况下,如果发生客户端重连,可能同一条消息会被客户端接收两次。 如果系统的qos要求是至多一次,是否就得进行一些调整 这个问题是怎么解决的 |
引用:Gangan_Master 发表于 2021-05-24 20:45 这方案确实还不够完美,但足够简单,也算是一种取舍吧 |
这种用MQ广播的方式,应该是比较适合这种关系简单的推送,对于群组,朋友圈这种复杂关系推送应该就捉襟见肘了 |
引用:JackJiang 发表于 2021-05-18 14:56 说的对 但这样的架构好像只适合于那种单聊的消息,给某一个用户去推送,从redis里就可以拿到对应的机器ip然后进行下推,那像那种群的类型,或者直播如果使用这种方式会不会不合适,因为一条消息要循环去查某所有用户,消息量一旦大起来了一点点后 整体的量级就是 消息数 * 群人数(或者在线人数) 这种要怎么解决嘞~ |
引用:云飞落灯花 发表于 2021-05-17 16:25 是的,文中的这个方案是不够优雅的。 比较优化的方案就是建一个全局的用户列表服务,比如用redis来做,向指定用户发送时,由路由层先查询这个用户所在的接层实例,向指定的实例通过RPC或者MQ都可以实现。 |
提问:解决会话共享的问题这块,该文使用的方式是MQ的广播,比如我只想推一个用户,但却需要所有机器进行消费处理这样会不会比较浪费资源。还有其他更优的方法没,欢迎评论区交流讨论 |