默认
发表评论 9
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] 请教IM集群情况下如何保证聊天消息的顺序
阅读(34823) | 评论(9 收藏 淘帖
请教一下,在集群模式下如何保证消息的顺序性,我想通过MQ 作为服务器的缓冲区,如果用一个队列不太好,如果用多个队列,如何保证消息的有序性呢?本身消息进来的时候会有全局递增id,但是投递可能会发生乱序

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:求助 IM开发
推荐方案
评论 9
高并发和顺序,其实是矛盾的,如果真的为了保证绝对有序性,那就只能在业务层实现有向环队列。

不过,im就是人在聊天说话,是有上下文的,偶尔的乱序,一是可以在客户端根据有序id号重整顺序,二是极端情况下极少概率顺序真的乱了,问题也不大,必竟,看不懂你可以让对方再发一次啊。

im在设计的时候,是可以接受万有一失原则的。
引用:JackJiang 发表于 2022-06-17 10:54
高并发和顺序,其实是矛盾的,如果真的为了保证绝对有序性,那就只能在业务层实现有向环队列。

不过,im ...

谢谢指导
IM理论上最低分布式一致性是因果一致性,只要不违反因果一致性,就不影响阅读。另外,你说的顺序还要定义到底是什么顺序。
如果绝对有序:
一.逻辑层面
1.按会话消息到单服务端排序,生成唯一递增id,时间戳
2.推送通知,再拉取的策略
3.客户端拉取到完整数据再显示
这样整体就是有序的,不通的客户端展示也是有序的
对于发送端,按照应答的msgid 排序,这样都有序展示一样,不乱序的.

不服来辩
签名: im从业10年以上,欢迎切磋![url=http://www.52im.net/static/image/smiley/default/handshake.gif]http://www.52im.net/static/image/smiley/default/handshake
引用:JackJiang 发表于 2022-06-17 10:54
高并发和顺序,其实是矛盾的,如果真的为了保证绝对有序性,那就只能在业务层实现有向环队列。

不过,im ...

通常是可以了,这个两个办法,就怕有些较真或者特殊场景
签名: im从业10年以上,欢迎切磋![url=http://www.52im.net/static/image/smiley/default/handshake.gif]http://www.52im.net/static/image/smiley/default/handshake
引用:Frank 发表于 2023-02-24 09:46
如果绝对有序:
一.逻辑层面
1.按会话消息到单服务端排序,生成唯一递增id,时间戳

这么自信的吗
引用:JackJiang 发表于 2023-02-24 10:45
这么自信的吗

站长,你说这里那里有漏洞?
签名: im从业10年以上,欢迎切磋![url=http://www.52im.net/static/image/smiley/default/handshake.gif]http://www.52im.net/static/image/smiley/default/handshake
引用:Frank 发表于 2023-02-26 09:13
站长,你说这里那里有漏洞?

信心最理要,漏洞算个球
引用:JackJiang 发表于 2023-02-26 19:34
信心最理要,漏洞算个球


表情没有👍
签名: im从业10年以上,欢迎切磋![url=http://www.52im.net/static/image/smiley/default/handshake.gif]http://www.52im.net/static/image/smiley/default/handshake
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部