顺序消息
1、介绍
“顺序消息”,是在 “普通消息” 的基础上,要求按发布的顺序进行消费。
- 生产者串行发布消息,会要求服务端给确认(confirm),否则异常提醒
- 服务端收到消息,并转到队列后,会答复一个接收确认
- 服务端串行派发消息,会要求消费者给回执(ack)
- 如果派发失败,会不断延时重试,直到派发成功为止。之后,才会再派发下一条消息
- 消费者消费后,会答复一个消费回执
适合像数据同步之类的 FIFO 应用场景。因为是串行消费,性能略差些。
2、代码演示
不分片。如果有集群,同一主题的消息会集中到某一个集群节点上(通过 topic_hash 进行负载均衡)
//同步
client.publish("demo.topic", new MqMessage("hello").sequence(true)));
//异步
client.publishAsync("demo.topic", new MqMessage("hello").sequence(true)));
分片。如果有集群,同一分片的消息会集中到某一个集群节点上(通过 sharding_hash 进行负载均衡)
//同步
client.publish("demo.topic", new MqMessage("hello").sequence(true, "sharding-1")));
//异步
client.publishAsync("demo.topic", new MqMessage("hello").sequence(true, "sharding-1")));
具体参考:《单线程及顺序保障架构图》