【RocketMQ生产者发送消息的三种方式:发送同步消息、异步消息、单向消息&案例实战&详细学习流程】

RocketMQ高手之路系列之四:RocketMQ之消息发送(一) 现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取! 阅读详情

一.知识回顾:

【0.RocketMQ专栏的内容在这里哟,帮你整理好了,更多内容持续更新中】
【1.Docker安装部署RocketMQ消息中间件详细教程】


知识补充:
在使用RocketMQ发送消息之前需要我们先完成之前RocketMQ的安装,然后在Maven导入依赖并熟悉生产者发送消息的API。

xml文件中导入依赖

<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

二.RocketMQ发送同步消息

2.1 同步消息

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

2.2 生产者同步发送消息实现代码

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

public class SyncProducer {
    public static void main(String[] args) throws Exception{
        // 实例化消息生产者Producer
        DefaultMQProducer producer = new DefaultMQProducer("group_test");

        // 设置NameServer的地址
        producer.setNamesrvAddr("IP地址:9876");
        //producer.setSendLatencyFaultEnable(true);

        // 启动Producer实例
        producer.start();


        for (int i = 0; i < 10; i++) {
            // 创建消息,并指定Topic,Tag和消息体
            Message msg = new Message("TopicTest" /* Topic */,
                    "TagA" /* Tag */,
                    ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
            );
            // 发送消息到一个Broker
            SendResult sendResult = producer.send(msg);
            System.out.printf("%s%n", sendResult);
        }
        //如果不再发送消息,关闭Producer实例。
        producer.shutdown();
    }
}

2.3 生产者同步发送消息运行结果

在这里插入图片描述
运行结果相关参数分析

  1. msgId
    消息的全局唯一标识(RocketMQ的ID生成是使用机器IP和消息偏移量的组成),由消息队列 MQ 系统自动生成,唯一标识某条消息。
  2. sendStatus
    发送的标识:成功,失败等
  3. queueId
    queueId是Topic的分区;Producer发送具体一条消息的时,对应选择的该Topic下的某一个Queue的标识ID。
  4. queueOffset
    Message queue是无限长的数组。一条消息进来下标就会涨1,而这个数组的下标就是queueOffset,queueOffset是从0开始递增。

2.4 生产者同步发送消息控制台展示

在这里插入图片描述

在这里插入图片描述

三.RocketMQ发送异步消息

3.1 异步消息

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

3.2 生产者异步发送消息实现代码

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

public class AsyncProducer {
    public static void main(String[] args) throws Exception{
        // 实例化消息生产者Producer
        DefaultMQProducer producer = new DefaultMQProducer("group_test");
        // 设置NameServer的地址
        producer.setNamesrvAddr("IP地址:9876");
        // 启动Producer实例
        producer.start();
        for (int i = 0; i < 10; i++) {
            final int index = i;
            // 创建消息,并指定Topic,Tag和消息体
            Message msg = new Message("TopicTest", "TagA", "OrderID888",
                    "Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));
            // SendCallback接收异步返回结果的回调
            producer.send(msg, new SendCallback() {
                @Override
                public void onSuccess(SendResult sendResult) {
                    System.out.printf("%s%n", sendResult);
                }
                @Override
                public void onException(Throwable e) {
                    System.out.printf("%-10d Exception %s %n", index, e);
                    e.printStackTrace();
                }
            });
        }
        Thread.sleep(10000);
        // 如果不再发送消息,关闭Producer实例。
        producer.shutdown();
    }
}

3.3 生产者异步发送消息运行结果

在这里插入图片描述
运行结果相关参数分析

  1. msgId
    消息的全局唯一标识(RocketMQ的ID生成是使用机器IP和消息偏移量的组成),由消息队列 MQ 系统自动生成,唯一标识某条消息。
  2. sendStatus
    发送的标识:成功,失败等
  3. queueId
    queueId是Topic的分区;Producer发送具体一条消息的时,对应选择的该Topic下的某一个Queue的标识ID。
  4. queueOffset
    Message queue是无限长的数组。一条消息进来下标就会涨1,而这个数组的下标就是queueOffset,queueOffset是从0开始递增。

3.4 生产者异步发送消息控制台展示

在这里插入图片描述

四.RocketMQ发送单向消息

4.1 单向消息

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

4.2 生产者单向发送消息代码实现

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

public class OnewayProducer {
    public static void main(String[] args) throws Exception{
        // 实例化消息生产者Producer对象
        DefaultMQProducer producer = new DefaultMQProducer("group_test");
        // 设置NameServer的地址
        producer.setNamesrvAddr("IP地址:9876");
        // 启动Producer实例
        producer.start();
        for (int i = 0; i < 10; i++) {
            // 创建消息,并指定Topic,Tag和消息体
            Message msg = new Message("TopicTest" /* Topic */,
                    "TagA" /* Tag */,
                    ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
            );
            // 发送单向消息,没有任何返回结果
            producer.sendOneway(msg);

        }
        // 如果不再发送消息,关闭Producer实例。
        producer.shutdown();
    }
}

4.3 生产者单向发送消息结果展示

在这里插入图片描述

4.4 生产者单向发送消息控制台展示

在这里插入图片描述

五.同步消息 vs 异步消息 vs 单向消息

在这里插入图片描述

好了,到这里【RocketMQ生产者发送消息的三种方式:发送同步消息、异步消息、单向消息&案例实战&详细学习流程】就先学习到这里,更多内容持续创作学习中,敬请期待呦^ - ^.

Kafka:Producer异步发送与回调 pom.xml: &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.or 阅读详情

相关推荐

RocketMQ DefaultMQProducer#send 方法源码解析:生产者投递消息(一)

该篇博文主要先简单分析几种不同方式的投递消息方式:SYNC、ASYNC、ONEWAY,以及支持通过指定的 MessageQueue、MessageQueueSelector 方式来对消息进行投递,同步模式投递情况下是通过 DefaultMQProducerImpl#sendDefaultImpl 方法进行重试的,而在异步模式是通过 MQClientAPIImpl#onExceptionImpl 方法重试的,这在后面一篇文章展开介绍,在消息发送之前,会对消息进行压缩,确保客户端与服务端之间交互的数据包大小是最

vnjohn 博主 > 主线分享后端领域业务设计知识、源码思想、架构设计 1891

中间件系列 - RocketMQ

本内容仅用于个人学习笔记,如有侵扰,联系删除【尚硅谷】RocketMQ教程丨深度掌握MQ消息中间件_哔哩哔哩_bilibili,,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据。一般消息的体量不会很大。从网上可以查看到很多的关于MQ用途的叙述,但总结起来其实就以下三点。限流削峰MQ可以将系统的超量请求暂存其中,以便系统后期可以慢慢进行处理,从而避免了请求的丢失或系统被压垮。 异步解耦 上游系统对下游系统的调用若为同步调用,则会大大降低系统

知行 4289

RocketMQ案例实战

假如是在同一个comsume组(consumeGroup1)里面,且topic定义的和生产者一样,之前订阅过生产者的消息,即已经注册到broker上面了,如上述有两个之前订阅过但是不在线,所以只有当消费者重启后会被消费:如果2个同时上线,则属于集群消费还是会被两个消费者均分,如果上线1个,则未消费消息将会被这一个全部消费掉。假如消费者是在同一个comsume组(consumeGroup1)里面,但是topic和生产者定义不一样,则意味着没订阅,此时即使生产者生产了消息,也不会被消费。

Romantic丶的博客 2131

RocketMQ发送消息

MQ的消费模式可以大致分为两种,一种是,一种是。服务端 (MQ) 主动推送消息给客户端,优点是及时性较好流控客户端 需要主动到 服务端 (MQ) 取数据,优点是客户端可以依据自己的消费能力进行消费,Push模式也是基于Pull模式的,所以不管是Push模式还是Pull模式,都是Pull模式。一般情况下,优先选择Pull模式。

qq_62767608的博客 5299

RocketMQ发送同步、异步、单向、延迟、批量、顺序、批量消息、带标签消息

如果我们有衣服订单的消息、手机订单的消息,如果我们只使用topic进行区分,就要使用两个topic;比如下订单业务,提交了一个订单就可以发送一个延时消息,30min后去检查这个订单的状态,如果还是未付款就取消订单释放库存。这种方式主要用在不关心发送结果的场景,这种方式吞吐量很大,但是存在消息丢失的风险,例如日志信息的发送。可以想象一个场景,我们在网上购物时,需要先完成下订单操作,然后再去发短信,再进行发货,需要保证顺序的。如果是顺序模式,如果重试失败,会无限重试,是int的最大值。

softshow1026的博客 1048

RocketMQ DefaultMQProducer#send 方法源码解析:生产者投递消息(二)

该篇博文主要分析几种不同方式的投递消息方式采用的核心方法,SYNC 采用的是 MQClientAPIImpl#sendMessageSync 方法处理、ASYNC 采用的是 MQClientAPIImpl#sendMessageAsync、ONEWAY 采用的是 NettyRemotingClient#invokeOneway 方法处理,而 ONEWAY、ASYNC 采用了信号量的方式去获取令牌凭证去向 Broker 发起请求,同时,由于是异步必须是要有回调存在的,所以会有一个异步调度线程去阻塞等待消息的投

vnjohn 博主 > 主线分享后端领域业务设计知识、源码思想、架构设计 1923

rocketmq发送消息的三种方式

从功能上来说,rocketmq支持三种发送消息的方式,分别是同步发送(sync),异步发送(async)和直接发送(oneway)。下面来简单说明一下这三种发送消息的方式,以便了解它们之间的差异。 以下的案例代码将会使用spring-message风格进行展示,即使用rocketMQTemplate方式,详见rocketmq-spring 同步发送 sync 发送消息采用同步模式,这种方式只...

相逢一笑 2万+

RocketMQ 三种消息发送方式

producer向broker发送消息时指定消息发送成功及发送异常的回调方法,调用API后立即返回,producer发送消息线程不阻塞,消息发送成功或失败的回调任务在一个新的线程中执行。发送消息前进行校验,比如消息的内容长度不能为0、消息最大长度、消息必要的属性是否具备等(topic、消息体,生产组等)。Producer按选择算法从以上队列中选择一个进行消息发送,如果发送消息失败则在下次选择的时候会规避掉失败的broker。主题下的一条消息能被消费组下的所有消费者消费。.........

流楚丶格念的博客 8109

RocketMQ - 消息发送模式:同步、异步、单向发送区别

摘要 RocketMQ提供三种消息发送模式满足不同业务需求: 同步发送 - 阻塞等待Broker响应,可靠性最高(1-10ms延迟),适用于支付通知等关键业务 异步发送 - 非阻塞+回调通知,平衡吞吐与可靠性(&lt;1ms延迟),适合订单创建等场景 单向发送 - 只发送不等待响应,吞吐量最高但可能丢失消息,适用于日志采集 核心差异: 可靠性:同步 &gt; 异步 &gt; 单向 延迟:单向 &lt; 异步 &lt; 同步 吞吐量:单向 &gt; 异步 &gt; 同步 建议根据业务容忍度选择模式,关键系统推

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

SAP SD 顾问面试问题 consultant interview questionnaire

以下是我个人目前面试团队 SD顾问问题的小结,希望对大家有所帮助, 也可能有回答错误的地方,希望同行不吝赐教。 也希望各位顾问们讲你们遇到的一些面试问题做个跟贴,方便大家共同进步,谢谢。   面试问题清单:  一、销售订单类型影响: 可用性检查,交货类型,输出,信贷,定价,需求,报表,合作伙伴,文本,不完整日志,交货开票,订单开票,公司间开票,统计组,屏幕顺序组,参数文件...

weixin_33825683的博客 1809

2024高教社杯数学建模国赛B题丨国一原创论文解析及源码超详细分享!

继续分享一篇2024国赛B题的国奖论文,包含可运行源代码jupyter,国赛B题通常比较聚焦实际复杂系统的多目标优化决策,主要偏重算法实现与概率建模解决开放性的管理问题。而且高度开放,无标准答案,学科交叉复杂,如资源调度、交通优化、海洋探测等。比较建议有一定统计学基础的同学参加。

ihui永不放弃 6739

RocketMQ三种消息发送方式-同步、异步、单向

可靠同步发送 主要运用在比较重要一点消息传递/通知等业务: public class SyncProducer { public static void main(String[] args) throws Exception { DefaultMQProducer producer = new DefaultMQProducer(&quot;test&quot;...

u010277958的博客 2万+

从理论到实践:基于Zemax的高分辨率生物显微镜光学系统仿真与优化指南

本文详细介绍了基于Zemax的高分辨率生物显微镜光学系统仿真与优化全流程。从阿贝分辨率公式、柯勒照明等理论基础出发,逐步讲解Zemax建模、像差优化、制造可行性分析等核心步骤,并提供常见问题解决方案。通过实际案例展示如何将理论设计转化为可制造的优化方案,帮助工程师掌握从仿真到实际应用的关键技术。

weixin_29229989的博客 482

RocketMQ同步消息、异步消息、单向消息详解

一、RocketMQ 支持 3 种消息发送方式 : 1、同步消息(sync message ) producer向 broker 发送消息,执行 API 时同步等待, 直到broker 服务器返回发送结果 。 2、异步消息(async message) producer向 broker 发送消息时指定消息发送成功及发送异常的回调方法,调用 API 后立即返回,producer发送消息线程不阻塞 ,...

1万+

LVGL 9.4 性能调优实战:如何通过脏区合并与tile分块,让你的嵌入式UI流畅度翻倍

本文深入探讨LVGL 9.4中的性能优化技术,重点介绍脏区合并与tile分块如何显著提升嵌入式UI流畅度。通过实战案例和源码分析,详细解析局部刷新策略、显示框架调优及性能瓶颈诊断方法,帮助开发者在STM32、ESP32等资源受限设备上实现丝滑的UI体验。

weixin_28678831的博客 450

使用HFSS仿真分支波导耦合器

本文介绍了分支波导耦合器的HFSS仿真设计过程。首先给出了器件关键参数(t=0.365mm,l=1.600mm等),详细说明了建模步骤:包括创建中心分支、设置变量参数、镜像复制两侧分支、矩形波导端口设计等操作。重点阐述了激励端口设置方法,包括四个端口的积分线绘制,以及求解频率设定。最后展示了S参数、幅度平衡度和相位差等关键性能指标的仿真结果提取方法。整个设计过程体现了HFSS在微波器件仿真中的参数化建模和结果分析能力。

shao666888的博客 180

云原生中间件RocketMQ-生产者核心解析、主从同步机制解析,生产者同步异步消息发送

方法中通过定义了一个固定时间的定时任务,时间是10秒钟执行一次,当然前提条件是broker节点的角色是slave,而broker节点是master时,如果有定时任务会取消,因为master是不用同步元数据信息。4个方法的内容实际上就是封装了netty做rpc的调用,对不同的操作都会对应到一个code。WriteSocketService(内部类)写往到Slave节点的数据。ReadSocketService(内部类)读来自Slave节点的数据。如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。...

write less , do more 4050

b站视频链接快速获取

快速获取b站视频数据

qq_45889931的博客 7790

【RocketMQ 生产者消费者】- 同步、异步、单向发送消费消息

下面继续更新 RocketMQ 系列的文章,前面这些文章我们已经讲述了 RocketMQ 消息的存储,那接下来就需要从消息发送和消费入手来逐步介绍 RocketMQ 的各种消息,如延时消息、事务消息 … 本篇文章我们就来学习下 RocketMQ 的消息发送和消费,也算是为后面的源码分析做下铺垫。

Jwasx的博客 1475

【华为OD机考】2025C+B+2024E+D卷真题【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】

可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 1万+

uniapp [全端兼容] - 实现接入集成高德地图搜索地址及选择位置功能,搜索框检索选择地点并返回经纬度及详细省市区县街道地址,用户搜索历史及清空历史记录,选择地址自动获取周边位置列表/地图移动选点

uni-app,高德地图,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,Uniapp高德地图,在地图上选择或搜索指定地点,打开地图选择位置,关联地址搜索,输入地址返回附近地址列表,uniApp高德地图地址搜索,搜索框历史记录,关键字搜索,周边查询,搜索位置,uniapp对接高德实现搜索出现地址以及保存搜索记录,集成高德地图,实现精准位置选点功能,获取当前定位城市,如何实现搜索功能,获取省份城市区街道详细地址经纬度,移动选点标记位置,在地图上进行选择位置选点、搜索

🏆 前端领域优质创作者 1万+

RocketMQ—RocketMQ发送同步、异步、单向、延迟、批量、顺序、批量消息、带标签消息

本文介绍了RocketMQ如何使用Java代码发送同步、异步、单向、延迟、批量、顺序、批量消息和带标签消息。

随机的未知——用已知去面对未知 1891

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SpringBoot集成RocketMQ实现三种消息发送方式

以上输出:发送者向MQ 执行发送消息API 时,指定消息发送成功后的回调函数,然后调用消息发送API 后,立即返回,消息发送者线程不阻塞,直到运行结束,消息发送成功或失败的回调任务在一个新的线程中返回。以上输出:消息发送者向MQ 执行发送消息API 时,直接返回,不等待消息服务器的结果,也不注册回调函数,只管发,不管是否成功存储在消息服务器上。以上输出可以看到:同步消息发送后,消息发送到broker后就返回结果了,消费端还未处理完,两者互互不影响。运行项目需要具备RocketMQ环境,参考。

m0_37999219的博客 2万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

RocketMQ消息发送

RocketMQ消息发送 RocketMQ 支持3 种消息发送方式: 同步 (sync)、异步(async)、单向(oneway)。 同步:发送者向 MQ 执行发送消息API 时,同步等待,直到消息服务器返回发送结果。 异步:发送者向MQ 执行发送消息API 时,指定消息发送成功后的回调函数,然后调用消息发送API 后,立即返回,消息发送者线程不阻塞,直到运行结束,消息发送成功或失败的回调任务在一个新的线程中返回。 单向:消息发送者向MQ 执行发送消息API 时,直接返回,不等待消息服务器的结果

qq_27061805的博客 4849

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

RocketMQ 消息生产:消息发送模式详解(同步、异步、单向)及适用场景

RocketMQ消息发送模式解析:同步、异步、单向三种方式各有特点。同步发送(阻塞等待确认)可靠性最高但性能较低,适合订单等关键业务;异步发送(回调通知结果)平衡性能与可靠性,适合高并发场景;单向发送(无确认机制)性能最佳但可靠性最差,仅适用于日志等非关键数据。选择时应根据业务对可靠性、性能的不同需求进行权衡,关键业务推荐同步发送,高并发场景建议异步发送,非关键日志可使用单向发送以提升性能。合理选择发送模式是构建高效消息系统的关键。

csdn_tom_168的博客 1277

RocketMQ消息发送模式:同步与异步实现详解

RocketMQ消息发送模式:同步与异步实现详解

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 1467
上一篇: 【Leetcode每日一题:1668.最大重复子字符串~~~暴力枚举遍历】
下一篇: 【Java中23种面试常考的设计模式之代理模式(Proxy)---结构型模式】
硕风和炜
硕风和炜 优质创作者: Java技术领域 优质创作者: Java技术领域
博客等级 码龄7年 2万+粉丝 1024原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值