RocketMq-消息模式讲解

139 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情

普通消息

本章节先会使用RocketMQ提供的原生客户端的API,当然除了原生客户端外,SpringBoot、SpringCloudStream也进行了集成,但本质上这些也是基于原生API的封装,所以只需掌握原生API,其他的也会水到渠成。

Java代码中使用普通消息的整体流程如下

导入MQ客户端依赖

<dependency>

    <groupId>org.apache.rocketmq</groupId>

    <artifactId>rocketmq-client</artifactId>

    <version>4.8.0</version>

</dependency>

消息发送者步骤

  1. 创建消息生产者producer,并指定生产者组名

  2. 指定Nameserver地址

  3. 启动producer

  4. 创建消息对象,指定Topic、Tag和消息体

  5. 发送消息

  6. 关闭生产者producer

 消息消费者步骤

  1. 创建消费者Consumer,指定消费者组名

  2. 指定Nameserver地址

  3. 订阅主题Topic和Tag

  4. 设置回调函数,处理消息

  5. 启动消费者consumer

三种消息发送方式

发送同步消息**

同步发送是指消息发送方发出数据后,同步等待,直到收到接收方发回响应之后才发下一个请求。这种可靠性同步地发送方式使用的比较广泛,比如:重要的消息通知,短信通知。

图片6.png

代码演示

图片7.png

发送结果分析

图片8.png

msgId

消息的全局唯一标识(RocketMQ的ID生成是使用机器IP和消息偏移量的组成),由消息队列 MQ 系统自动生成,唯一标识某条消息。

sendStatus

发送的标识:成功,失败等

queueId

queueId是Topic的分区;Producer发送具体一条消息的时,对应选择的该Topic下的某一个Queue的标识ID。

queueOffset

Message queue是无限长的数组。一条消息进来下标就会涨1,而这个数组的下标就是queueOffset,queueOffset是从0开始递增。

发送异步消息

异步消息通常用在对响应时间敏感的业务场景,即发送端不能容忍长时间地等待Broker的响应。消息发送方在发送了一条消息后,不等接收方发回响应,接着进行第二条消息发送。发送方通过回调接口的方式接收服务器响应,并对响应结果进行处理。

图片9.png

代码演示

图片10.png

发送结果分析跟发送同步消息相同。

单向发送

这种方式主要用在不特别关心发送结果的场景,例如日志发送。单向(Oneway)发送特点为发送方只负责发送消息,不等待服务器回应且没有回调函数触发,即只发送请求不等待应答。此方式发送消息的过程耗时非常短,一般在微秒级别。

图片11.png

代码演示

图片12.png

 

消息发送的权衡

图片13.png