RocketMQ的3种消息发送模式是什么?如何确保消息不丢失?

RocketMQ发送消息的三种模式分别是:同步发送异步发送单向发送

1、同步发送模式(Sync)

发送方发送消息后会等待消息被成功发送到消息队列服务器并收到确认消息后才返回发送结果给调用方。这种模式下,发送方会阻塞等待Broker返回发送结果,直到收到确认消息或者超时。

  • 应用场景:对消息的可靠性和顺序性要求较高的场景。
  • 典型应用:订单支付、账单生成、库存扣减等涉及到重要业务操作的场景,需要确保消息被成功发送和持久化,并等待确认消息来保证可靠性。

2、异步发送模式(Async)

发送方发送消息后不会阻塞等待,而是立即返回一个 Future 对象给调用方。发送方在后台线程中异步等待消息发送结果,并通过回调函数处理发送结果。

  • 应用场景:对响应时间有要求的场景,通常用于提高发送吞吐量。
  • 典型应用:日志收集、用户行为追踪、实时数据采集等需要高吞吐量的场景,通过异步发送模式可以尽快发送消息并在后台线程中处理发送结果。

3、单向发送模式(Oneway)

单向发送是消息发送完之后就不管了,不管发送成功没成功,是最不可靠的一种方式。

  • 应用场景:对消息的可靠性要求较低,不需要等待确认消息的场景。
  • 典型应用:日志记录、广播通知、通知类消息等不需要关注发送结果,只需发送而无需等待响应的场景。

4、模式的选择

需要根据具体的业务需求和场景来选择合适的发送模式。例如,对于需要确保消息的可靠性和顺序性的关键业务操作,同步发送模式是一个较好的选择。而对于日志收集等高吞吐量场景,异步发送模式可以提高消息发送的效率。对于不需要关注发送结果的通知类消息,可以使用单向发送模式。

5、确保消息不丢失的几种措施

  • 消息持久化:RocketMQ支持将消息持久化到磁盘,即使发生服务器故障或重启,消息也能够得到保留。消息持久化可以通过设置消息的持久化级别来实现,包括同步刷盘(SYNC_FLUSH)和异步刷盘(ASYNC_FLUSH)等。
  • 高可用部署:通过在RocketMQ集群中使用多个Broker节点,实现高可用性部署。当某个Broker节点发生故障时,其他节点可以接管消息的处理,确保消息的可靠传输。
  • 冗余备份:可以通过设置消息的冗余备份数量,将消息在多个Broker节点上进行备份存储。即使某个节点发生故障,仍然可以从其他节点中获取备份消息,确保消息不丢失。
  • 合理的重试机制:在发送消息时,可以设置合理的重试次数和重试间隔,以应对发送失败的情况。在发送失败后,可以选择重新发送消息,直到消息成功发送为止。MQ为生产者提供了失败重试机制,同步发送和异步发送默认都是失败重试两次当然可以修改重试次数,如果多次还是失败,那么可以采取记录这条信息,然后人工采取补偿机制。
  • 监控和报警:建议设置监控和报警系统,及时监测RocketMQ集群的状态和性能指标。通过监控系统可以发现异常情况并及时采取措施来确保消息的可靠性。

综上所述,为了确保消息不丢失,可以采取消息持久化、高可用部署、冗余备份、合理的重试机制以及监控和报警等措施。这些方法可以提高消息的可靠性和系统的稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/104373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【交付高质量,用户高增长】-用户增长质量保证方法论 | 京东云技术团队

前言 俗话说,“测试是质量的守护者”,但单凭测试本身却远远不够。大多数情况下,测试像“一面镜子”,照出系统的面貌,给开发者提供修改代码的依据,这个“照镜子”的过程,就是质量评估的过程&…

利用Python分析金融交易中的滚动Z值

大家好,在不断演变的证券交易领域,能够利用数据和统计学的力量提供重要的优势。无论是预测未来价格、分析市场趋势,还是简单地评估特定证券的波动性,数据驱动的见解已经改变了交易者对证券市场的处理方式。这就是Z值的用途&#x…

STM32_PID通用算法增量式和位置式

STM32_PID通用算法增量式和位置式 前言: 此算法为入门级PID算法,调试好参数后可应用于温度控制、舵机控制、直流电机的转速控制和直流电机的角度控制等等,下面就以温度控制举例 pid.c #include "pid.h" #include "sensor.h&q…

数据结构:二叉排序树

什么是二叉排序树? 二叉排序树要么是空二叉树,要么具有如下特点: 二叉排序树中,如果其根结点有左子树,那么左子树上所有结点的值都小于根结点的值;二叉排序树中,如果其根结点有右子树&#xf…

电脑重做系统---win10

电脑重做系统---win10 前言制作启动U盘材料方法打开网址下载启动盘制作工具参照官方说明进行制作使用U盘重做系统 常用软件官网地址 前言 记得最早学习装电脑还是04年左右,最为一个啥也不知道的大一傻白胖,花了几百大洋在电脑版把了个“电脑组装与维修”…

一体化运维监控:提供全方位数据洞察

摘要:运维监控在数字化日益深入的今天变得至关重要。一体化运维监控管理平台脱颖而出,成为业界知名的数据采集与运维洞察方案提供商,为企业带来“看到一切”的全新体验。 正文: 在大数据时代的洪流中,企业不仅要面对数…

淘宝店铺商品评论数据采集,淘宝商品评论数据接口,淘宝API接口

采集淘宝店铺商品评论数据的方法如下: 进入主界面,选择"自定义任务"。将商品信息页的网址复制粘贴到网站输入框中,点击"保存设置"。将页面下拉到底部,点击"下一页"按钮,在右侧的操作提…

3. Windows下C++/MFC调用hiredis库操作redis示例

一、头文件目录 将之前下载和编译好的Redis目录拷贝到新建好的工程目录下面,再点击测试工程的右键/属性,点击C/常规,附加包含目录添加以下路径,注意如果原先有多个路径,在末尾处添加分号后再粘贴: 点击C/常…

在CentOS操作系统上使用yum安装/使用/卸载Docker容器引擎

前言 简单记录一下如何在CentOS操作系统上安装、使用、卸载Docker容器引擎,以及配置Docker镜像加速地址。 一、在CentOS操作系统上安装Docker容器引擎 (1)首先更新yum软件包索引 yum check-update(2)安装yum软件包管…

vue引入jQuery

配置 下载 npm install jquery --save在build的webpack.base.conf中 var webpackrequire("webpack")在module.exports中: plugins: [ //   new webpack.optimize.CommonsChunkPlugin(common.js),new webpack.ProvidePlugin({jQuery: "jquery",$: &quo…

chapter8 Dimensionality Reduction(降维)

设置 首先,确保代码在python2和python3中都能正常工作,导入一些通用模块,确保MatplotLib以内联方式绘制图形,并准备一个函数来保存这些图形: from __future__ import division,print_function,unicode_literalsimport numpy as …

微服务13-Seata的四种分布式事务模式

文章目录 XA模式实现XA模式 AT模式AT模式的脏写问题(对同数据并发写的问题)其他事务不获取全局锁的一个情况(AT模式写隔离的实现)实现AT模式 TCC模式TCC实现我们怎么样去判断是否空回滚和业务悬挂?业务分析 Saga模式总…

【学习笔记】项目进行过程中遇到有关composer的问题

composer.json内容详解 以项目中的composer.json为例,参考文档。 name:composer包名type:包的类型,project和library两种keywords:关键词,方便别人在安装时通过关键词检索(没试过,好…

Java 中 Volatile 关键字

基本概念 补充一下 java 内存模型中的 可见性、原子性和有序性 可见性: 指的是线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果,另一个线程马上可以看到。比如 :用 volatile 修饰的变量&am…

froeach迭代删除和List迭代删除问题

场景:我有一个 List<ISSLogMessage> records 数据,需要从里面删除指定内容数据 第一次写成 foreach(var item in records) {if (item.logMessage.Contains("上传通行记录"))records.Remove(item); } 直接报错,因为foreach 是个迭代器 直接移除它的对象会报…

Redis实现简易消息队列的三种方式

Redis实现简易消息队列的三种方式 消息队列简介 消息队列是一种用于在计算机系统中传递和处理数据的重要工具。如果你完全不了解消息队列&#xff0c;不用担心&#xff0c;我将尽力以简单明了的方式来解释它。 首先&#xff0c;想象一下你正在玩一个游戏&#xff0c;而游戏中…

Web应用防火墙的性能优化技术

Web应用防火墙&#xff08;WAF&#xff09;是企业网络安全的重要屏障&#xff0c;其性能直接影响到网络服务的质量和安全。本文详细探讨了WAF性能优化的几种技术&#xff0c;旨在为网络安全专业人员提供实用的参考。 规则优化 1.1 精简规则集 规则评估&#xff1a;定期评估规…

JQuery、JSON、AJAX、XML、IO流、多线程、反射核心知识点详解

JQuery 一、什么是JQuery JQuery是JavaScript的一个框架&#xff0c;对js的封装&#xff0c;使得js简单易学 优点&#xff1a; 1、不用考虑浏览器兼容性问题 2、jquery拥有强大的选择器&#xff0c;简化了js代码 3、jquery提供了很多系统函数&#xff0c;直接调用 二、版本 1.x…

面试题补充

1.公司有几套环境&#xff1a;测试环境&#xff08;测试人员使用&#xff09;&#xff0c;开发环境&#xff08;开发人员使用&#xff09;&#xff0c;预生产环境&#xff08;测试人员使用&#xff09;&#xff0c;生产环境&#xff08;用户使用&#xff09; 2.作为一名测试&a…

C语言第一节--从c语言源码到可执行文件

C语言第一节–从c语言源码到可执行文件 编译 C 语言代码生成可执行文件的流程一般可以分为四个步骤&#xff1a;预处理、编译、汇编和链接。 假设有一个名为 “hello.c” 的 C 语言源文件&#xff0c;内容如下&#xff1a; #include <stdio.h>int main() {printf("…