高并发情况下如何保证消息的顺序
2018-03-11 01:33
1111 查看
在知乎上看到一位大牛总结了一些保证消息顺序的方案,在此记录下来学习一下。
在多队列消息处理的场景中,怎样保持多个消息之间的时间顺序,是一个很经典的问题。解决方法当然是有的。
为了讨论这个问题,让我们做一些简化问题的假设:
有若干个消息队列A、B、C……
2.有若干个线程在产生消息,并分别将消息加入这些队列
3.每个消息队列有一个对应的线程(WorkerA、WorkerB、Worker C……),从队列中读取和处理消息
另外,还有一个很重要的前提:要保持多个消息之间的时间顺序,首先它们要有一个全局的时间顺序。因此,每个消息在被创建时,都将被赋予一个全局唯一的、单调递增的、连续的序列号(SerialNumber,SN)。可以通过一个全局计数器来实现这一点。通过比较两个消息的SN,确定其先后顺序。
在多队列消息处理的场景中,怎样保持多个消息之间的时间顺序,是一个很经典的问题。解决方法当然是有的。
为了讨论这个问题,让我们做一些简化问题的假设:
有若干个消息队列A、B、C……
2.有若干个线程在产生消息,并分别将消息加入这些队列
3.每个消息队列有一个对应的线程(WorkerA、WorkerB、Worker C……),从队列中读取和处理消息
另外,还有一个很重要的前提:要保持多个消息之间的时间顺序,首先它们要有一个全局的时间顺序。因此,每个消息在被创建时,都将被赋予一个全局唯一的、单调递增的、连续的序列号(SerialNumber,SN)。可以通过一个全局计数器来实现这一点。通过比较两个消息的SN,确定其先后顺序。
相关文章推荐
- 转:TCP为什么要3次握手和4次挥手时等待2MSL、 TCP如何保证消息顺序以及可靠性到达
- 如何保证消费者接收消息的顺序
- SpringMVC是单例的,高并发情况下,如何保证性能的?
- (场景)kafka的topic多分区的情况,如何保证跨区的消息消费的顺序性
- SpringMVC是单例的,高并发情况下,如何保证性能的?
- kafka的topic多分区的情况,如何保证跨区的消息消费的顺序性
- 京东JMQ如何保证消息顺序消费
- 京东JMQ如何保证消息顺序消费
- spring boot / cloud (十九) 并发消费消息,如何保证入库的数据是最新的?
- TCP如何保证消息顺序以及可靠性到达
- SpringMVC是单例的,高并发情况下,如何保证性能的?
- spring boot / cloud (十九) 并发消费消息,如何保证入库的数据是最新的?
- SpringMVC是单例的,高并发情况下,如何保证性能的?
- 如何保证android程序进程不到万不得已的情况下,不会被结束
- 小小问题集锦5之---为什么在没有 ORDER BY 子句的情况下无法保证 SELECT 语句所返回结果的顺序
- Twitter Storm如何保证消息不丢失
- 网易视频云分享:消息队列设计中如何保证同一用户的消息按序处理
- 使用消息系统进行微服务间通讯时,如何保证数据一致性
- TCP是如何保证包的顺序传输?
- Dynamo分布式系统——「RWN」协议解决多备份数据如何读写来保证数据一致性,而「向量时钟」来保证当读取到多个备份数据的时候,如何判断哪些数据是最新的这种情况