什么是顺序发送:
消息生产和消息消费都严格按照先进先出的原则
顺序消息分为两种:
全局顺序: top下所有的queue都要进行FIFO 生产和消费,这种比较少用,会造成消息的堵塞,吞吐量不高,
局部顺序消息
确保top下面的一组队列 queque 顺序保存一直就行了,先发送的消息一定先被消费,比如我们订单系统,按 创建订单,支付订单,完成订单 三个步骤,必须按顺序进行处理
顺序消息只能是同步的,异步的不能确保哪个消息先到,广播模式也不支持,不能确保哪台服务的速度比较快
product实体类,模拟数据
生产者案例:
根据 MessageQueueSelector 策列,把订单号进行取已操作,每个订单号都是唯一的,确保能放进一个队列里面
消费者案例
使用 MessageListenerOrderly,单线程,分配到的queque是固定的,在集群的情况下,或先获取queue 锁,然后锁定该队列,其他消费端就不能获取到里面的消息了,确保数据的一致性
代码测试
发送到相同的队列
消费端 先发的消息先被消费
集群模式测试
启动多个Consumer -Dserver.port=8772
集群查看: