消息类型-顺序消息|学习笔记

简介: 快速学习消息类型-顺序消息

开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第四阶段消息类型-顺序消息】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/686/detail/11910


消息类型-顺序消息


顺序消息

顺序消息是消息队列提供的一种严格按照顺序来发布和消费的消息类型。

image.png

RocketMQ 本身是一个先进先出的消息队列,本身已经保证消息的顺序性,单独的再搞一个顺序消息是因为前面普通消息没法保证消息的顺序发布和消费。跟 RocketMQ 本身的内部结构有关系。

这张图上左边部分是消息生产者,右边可以认为是 RocketMQ 里面的 Block,Block 里面是有多个 Message Quenue 存在。

接下来生产者开始往 Block 里面进行消息投递,在消息投递的时候默认是不能够保证消息会投递到哪一个 Message Quenue,比如消息生产者有三个消息1、2、3,这三个消息要求是有顺序性的,消息投递的时候可能第一个消息来到第一个 Block,第二个消息来到第二个关系。第三个消息可能到第三个上面,然后作为消费者看到的 Block 里面的 Message Quenue 是等价的,在消费的时候有可能先去消费第二个,再去消费第三个,再去消费第一个,不能够保证顺序消费的问题。

只需要保证把有顺序的消息投递到同一个 Message Quenue 上就可以了,比如三个消息,第一个投递过来是第一块的,第二个也要来到这块,第三个还要来到这,能够保证它都在同一个 Message Quenue 上,消费者在消费的时候对于同一个 message 上的数据,绝对是可以保证顺序消费的,解决了顺序发布消费的问题。

image.png

写代码之前首先来到控制页面,看一下 topic 主题,点击状态,可以看到当前主题下面的队列

image.png

默认有四个队列的,四个队列里面前三个已经有消息存在,有两个的,有一个的,接下来再来模拟发送几条普通消息,看是否会落在同一个 Message Quenue 上。

image.png

为了简单直接发送单向消息

//单向消息

@Test

public void testoneWay() {

for (int i = o; i < 10; i++) {

rocketMoTemplate.sendOneWay(destination:"test-topic-1", payload:"这是一条单向消息")

}

}

}

运行一下,已经跑完

点击状态,发现落在每一个上面,第一个多三个,第二个多三个,第三个多两个,第四个多两个,一共是有十个消息分布在四个队列上去,保证不了消费的可引性。

image.png

发送顺序消息:

//参数随便写,保证不重复

//单向顺序消息

@Test

publia void testoneWayOrderly() {

for (inti=o;i<10;i++){

//第三个参数的作用是用来决定这些消息发送到哪个队列的上的

rocketMQTemplate.sendOneWayorderly( destination:

"test-to pic-1",payload:"这是一条单向消息",

hashKey:"xx");

}

}

}

发送消息看结果:

image.png

都落在第一个队列上,保证了发送时候都在同一个队列上,也保证了发送时的顺应性,这是单向消息的顺序。

对于其他的比如说同步和异步消息都提供了相同的 Orderly 上,用法和单向消息是完全一致的。

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
关系型数据库 MySQL Java
SSM整合流程(整合配置、功能模块开发、接口测试)
SSM整合流程(整合配置、功能模块开发、接口测试)
300 0
|
8月前
|
存储 算法 Java
JVM: 内存、类与垃圾
分代收集算法将内存分为新生代和老年代,分别使用不同的垃圾回收算法。新生代对象使用复制算法,老年代对象使用标记-清除或标记-整理算法。
101 6
|
11月前
|
存储 安全 算法
什么是秒合约?竞猜游戏交易所app系统开发规则介绍
秒合约是一种基于区块链技术的超短期衍生品合约,交易周期以秒为单位。它通过智能合约实现交易的自动化和去信任化,优化执行流程,提高交易速度和效率。秒合约适合高风险投机者,收益和风险固定,不使用杠杆。此外,竞猜游戏交易所app系统也涉及快速交易和投机,需确保安全、稳定及合规运营。
|
11月前
|
前端开发 JavaScript 虚拟化
React 树形组件 Tree View
本文从零开始构建了一个简单的React树形组件,介绍了环境准备、项目创建、基础组件构建等步骤,并探讨了常见问题及解决方案,包括层次嵌套过深、状态管理复杂、事件处理不当和样式问题,帮助读者在实际项目中更好地应用树形组件。
490 3
QGS
|
Java 容器
浅学JAVAFX布局
浅学JAVAFX布局
QGS
201 0
|
存储 Java
FeignClient【问题】Cannot deserialize value of type``from Object value (token `JsonToken.START_OBJECT`)
FeignClient【问题】Cannot deserialize value of type``from Object value (token `JsonToken.START_OBJECT`)
1463 0
|
前端开发 Linux Windows
Apipost下载安装和功能详解
ApiPost = PostMan + Swagger + Mock + Jmeter 后端、前端、测试同时在线编辑,同时在线协作,内容实时同步1.官网地址:https://www.apipost.cn/2.官网支持客户端下载及web版在线调试,可根据自己的需求选择适合自己的使用方式。
623 0
Apipost下载安装和功能详解