RocketMQ
文章平均质量分 65
C18298182575
跳出舒适区
展开
-
Rocketmq如何保证消息不丢失,如何保证消息不被重复消费
1、消息整体处理过程这里我们将消息的整体处理阶段分为3个阶段进行分析:Producer发送消息阶段。Broker处理消息阶段。Consumer消费消息阶段。Producer发送消息阶段发送消息阶段涉及到Producer到broker的网络通信,因此丢失消息的几率一定会有,那RocketMQ在此阶段用了哪些手段保证消息不丢失了(或者说降低丢失的可能性)。手段一:提供SYNC的发送消息方式,等待broker处理结果。RocketMQ提供了3种发送消息方式,分别是:同步发送转载 2021-12-21 12:51:23 · 1062 阅读 · 0 评论 -
日志平台查询异常,没有打印异常信息
根据关键字查询:rongcloud-register-errorcat im_info.log |grep -A 10 -B 10 rongcloud-register-errorhttps://blog.csdn.net/qq_31024251/article/details/1088014591, 显示filename文件中,abc行上下3行内容(含abc行)grep -C 3 abc filename 1显示filename文件中,abc行下3行内容(含abc行)gr..原创 2021-12-17 11:27:32 · 165 阅读 · 0 评论 -
RocketMQ 源码之 异步和同步请求 以及异步的回调 是怎么做到的
不管是DefaultMQProducer还是DefaultMQPushConsumer,本质都是封装类,发起请求的实际上是RemotingClient,它的start方法调用之后,启动了一个netty的客户端bootstrap,每次需要与nameService或者broker进行连接的时候,调用getAndCreateChannel方法,从一个map中创建或者获取channel(创建的时候nameService和broker两者的区别在于addr参数是不是为null),连接建立之后,发起请求调用的是invo转载 2021-12-16 16:47:48 · 1285 阅读 · 0 评论 -
rocketmq同步消息,异步消息
1.同步发送后,会阻塞到mq服务端发回响应。2.异步发送后,不等待服务端响应立即返回,继续发送下一个数据包;在回调中处理处理接下来的业务。场景:要求快速响应,比如扫码支付,立即显示支付成功,需要数据落库,从银行卡扣款稍后消息本身具有异步特性,同步消息也可以实现,发送即响应,这个响应时间在哪,是发送到broker即可。异步的场景在于回调,如果只是与broker通信时间很短,应该某种场景mq响应比较长,才做发异步消息,有点混乱,不知道什么时候发异步消息的场景了,待续......原创 2021-12-16 13:05:13 · 2798 阅读 · 0 评论 -
rocketmq长轮询
什么是长轮询whypush:broker推,优势:实时,长链接,不会频繁建立链接;缺点:慢消费,broker负载过高pull:客户端拉,优势:消费数量,速度可控;缺点:间隔难设定,过短,频繁网络请求,无效请求,过长:延迟消费为了保证实时,我们可以把拉取消息的间隔设置的短一点,但这也带来了一个另外一个问题,在没有消息的时候时候会有大量pull请求,为了解决这个问题,就采用了本文讲解的长轮询技术。轮询是以固定间隔请求服务器,它不在乎这次请求是否能拉取到消息。而长轮询,它请求的服务端,会等待一原创 2021-12-14 19:26:56 · 2082 阅读 · 0 评论 -
RocketMQ消息消费之长轮询
RocketMQ消费端有两种获取消息的方式,Push方式和Pull方式。但这两种方式都有一定的缺陷,后来采用了一种折中的方法,采用”长轮询“的方式,它既可以拥有Pull的优点,又能达到保证实时性的目的。长轮询的思想:服务端接收到新消息请求后,如果队列里没有新消息,并不急于返回,通过一个循环不断查看状态,每次waitForRunning一段时间(默认是5秒),然后再Check。Broker默认最长阻塞时间为15秒,默认情况下当Broker一直没有新消息,第三次Check的时候,等待时间超过最长阻塞时间,转载 2021-12-14 19:22:06 · 988 阅读 · 1 评论 -
消费者原理分析-RocketMQ知识体系4
前文了解了 RocketMQ消息存储的相关原理,本文将讲讲消息消费的过程及相关概念。公众号回复:长轮询,获取测试代码关于消息消费,消费者组这些概念,基本和kafka 是类似的,比如:一个消费组内可以包含多个消费者,1个消费组可订阅多个主题。消费组之间有集群模式与广播模式两种。集群模式下,主题下的同一消息只允许被消费组内的一个消费者消费,消费进度存储在 broker 端。广播模式下,则每个消费者都可以消费该消息,消费进度存储在消费者端。集群模式下,一个消费队列同一时间,只允许被一个消费者消转载 2021-12-13 18:34:15 · 247 阅读 · 0 评论 -
rocketmq消费
【PullMessageService 消息拉取】RocketMQ 通过 PullMessageService 拉取消息。通过代码段 PullMessageService#run可以看出:关于PullRequestPullMessageService 添加 PullRequest 有两种方式:延时添加立即添加---------------------------------------------------------------------【关于ProcessQ...原创 2021-12-13 18:32:31 · 327 阅读 · 0 评论 -
RocketMQ消息消费源码分析
消息消费流程图当消息存储到broker后,启动消费者消费,每个消费者都是一个DefaultMQPushConsumer,都要实现consumeMessage方法,每次去拉取新消息,消费者启动初始化DefaultMQPushConsumerImpl#start方法 public synchronized void start() throws MQClientException { switch (this.serviceState) { ..转载 2021-12-10 17:51:31 · 279 阅读 · 0 评论 -
rocketmq的有序消费模式和并发消费模式的区别
rocketmq消费者注册监听有两种模式,有序消费MessageListenerOrderly和并发消费MessageListenerConcurrently,这两种模式返回值不同。MessageListenerOrderly正确消费返回ConsumeOrderlyStatus.SUCCESS,稍后消费返回ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENTMessageListenerConcurrently正确消费返回ConsumeConcu转载 2021-12-08 13:23:28 · 4688 阅读 · 0 评论 -
rocketmq生产者发送到哪个队列
C-DefaultMQProducerC-DefaultMQProducerImpl method(sendDefaultImpl-sendKernelImpl-)M-sendKernelImplC-MQClientInstance-MQClientAPIImpl-M(sendMessage-) 构建-RemotingCommand(1.构建请求头 2.填充消息体)-NettyRemotingClient-NettyRemotingAbstract-M(invokeSync.原创 2021-11-26 13:16:51 · 2307 阅读 · 0 评论 -
RocketMQ原理解析-producer 2.如何发送消息
Producer轮询某topic下的所有队列的方式来实现发送方的负载均衡1) Topic下的所有队列如何理解:比如broker1, broker2, borker3三台broker机器都配置了Topic_ABroker1 的队列为queue0 , queue1Broker2 的队列为queue0, queue2, queue3,Broker3 的队列为queue0当然一般情况下的broker的配置都是一样的以上当broker启动的时候注册到namesrv的Topic_A队列为共.转载 2021-11-26 10:49:38 · 78 阅读 · 0 评论 -
深入研究RocketMQ生产者发送消息的底层原理
前言hello,小伙伴们,王子又来和大家研究RocketMQ的原理了,之前的文章RocketMQ生产部署架构如何设计中,我们已经简单的聊过了生产者是如何发送消息给Broker的。我们简单回顾一下这个过程。生产者首先声明一个Topic,然后为了把消息存到对应的Topic中,先从NameServer拉取注册信息获取到Topic存放在哪个Broker中,然后就可以访问对应的Broker发送消息了。大体流程就是这样,那么这个过程中具体都发生了什么呢,王子今天就和大家深入的探讨一下这其中的奥秘。转载 2021-11-26 09:04:07 · 258 阅读 · 0 评论 -
rocketmq问题记录
RocketMQ之一:RocketMQ整体介绍 - duanxz - 博客园1.topic与queue关系,queue默认4个在生产者中有指定,是每创建一个topic都会生成4个队列吗,应该是修改默认队列2.消费组中包含多个消费者怎么模拟多消费者消费场景,实际业务中什么场景存在多消费者...原创 2021-11-25 17:50:51 · 527 阅读 · 0 评论 -
Rocketmq技术分享
1.架构图2.基本概念3.服务搭建4.怎么集成springBoot,及原理5.使用场景,及基本方法,举例订单 代码设计,幂等6.部分实现原理6.1 发送消息路由原理,如何找到队列6.2 消费端消费原理,如何监听7.消息存储8.通讯原理8.1 客户端-服务端概念8.2 Netty编码解码...原创 2021-11-25 10:49:40 · 903 阅读 · 0 评论 -
rocketmq源码调试
一,环境搭建1启动nameServer1.启动存在问题启动类报错需要进行2,32.添加配置在项目下创建文件conf,并拷贝配置文件到该目录下配置文件在哪找3.配置环境变量为什么添加:让系统找到2步骤中配置name 上面报错中有提示:ROCKETMQ_HOMEvalue 源码路径2 启动broker1.修改broker配置文件,添加数据保存路径,不添加保存在默认位置自定义文件生成路径添加配置,如下图-c D:\...原创 2021-11-25 09:44:04 · 1465 阅读 · 0 评论 -
消息中间件—RocketMQ的RPC通信(一)
文章摘要:借用小厮的一句话“消息队列的本质在于消息的发送、存储和接收”。那么,对于一款消息队列来说,如何做到消息的高效发送与接收是重点和关键一、RocketMQ中Remoting通信模块概览RocketMQ消息队列的整体部署架构如下图所示:RocketMQ整体的架构集群图.jpg先来说下RocketMQ消息队列集群中的几个角色:(1)NameServer:在MQ集群中做的是做命名服务,更新和路由发现 broker服务;(2)Broker-Master:broker 消息主机服务器.转载 2021-11-23 17:59:59 · 422 阅读 · 0 评论 -
RocketMQ源码-基于Netty的通信层设计
1 概述2 Netty通信服务端3 Netty通信客户端1 概述看RocketMQ的源码可以知道,RocketMQ各组件的通信主要基于Netty实现,这里用“主要”是因为RocketMQ的通信也有采用原生Java NIO的实现方式,比如Master Broker和Slave Broker之间HA实现就采用原生Java NIO实现,具体可参考HAService以及HAConnection等相关类的实现(后面有机会会有专文介绍RocketMQ HA实现)。下面我们会直接介绍RocketMQ使用Net转载 2021-11-23 13:28:27 · 605 阅读 · 2 评论 -
rocketmq底层通信模块解析
???????? SegmentFault D-Day Online 开源开放与新技术创新,快来报名 >>>rocketMQ通信模块Rocketmq的通信层是基于通信框架netty 4.0.21.Final之上做了简单的协议封装,基本的类图如下:通讯模块是怎么进行的消息传输的先来看看服务器端启动做了什么:netty服务器启动,监听在8888;netty设置了一个心跳检测器IdleStateHandler,读写超时时间为120s,在120s后都没有读写操作转载 2021-11-23 12:56:39 · 430 阅读 · 0 评论 -
springboot集成购买阿里的rocketmq
上篇文章介绍了springboot集成自建rocketmq双主双从https://blog.csdn.net/C18298182575/article/details/121381621这里说集成购买的rocketmq,主要区别在哪1.多了一个client-ip,之前这个是不需要配置的,默认取本机ip2.access-key secret-key,这是对接阿里,腾讯等必须的密钥,配置即可3.在代码层面实现以上两个配置配置rocketmq: name-server: "192原创 2021-11-18 10:04:40 · 401 阅读 · 0 评论 -
springboot集成rocketmq
一般集成一个中间件,比如redis,elasticjob等,分为以下几个步骤1.导入包含springboot对应的start2.写配置文件,相应的配置信息3.定义配置文件对应的属性类,加载配置信息(可不用,用注解读取配置文件属性)4.写配置类,初始化相应的bean比如elasticjob需要zk,所以要配置类配置zk信息,今天说的roketmq需要nameserver服务作为类似注册中心,所以需要配置nameserver信息。但是既然是springboot start最大的好处就是简化配原创 2021-11-17 17:54:36 · 1502 阅读 · 0 评论 -
rocketmq概念
大纲1.负载均衡2.消息重试3.死信队列4.幂等1.负载均衡是在集群模式下谈论,分为生产者负载均衡和消费者负载均衡集群生产者轮询消费者平均分配消费者环状轮流广播2.消息重试重试场景:消费者返回重试状态,返回null,返回异常重试次数控制不重试3.死信队列消费者消费失败,消息会再次投递,达到16次,进入死信队列,不再被消费4.幂等场景:1.网络闪断或生产者客户端宕机,服务端无应答或应答失败,...原创 2021-11-15 17:48:53 · 1634 阅读 · 0 评论 -
rocketmq下单支付场景
订单支付总体流程下单流程及问题下单确认失败,在catch中发送失败消息,库存,优惠券消费失败消息,注意采取广播消费模式支付流程及问题支付成功后,需要记录支付日志,修改订单状态,扣积分。支付成功,收到回调消息后,发送消息到消息队列,记录日志,修改订单,扣积分消息消息进行处理。响应第三方支付平台:这个具体做什么动作。效果应该是,收到回调消息,立刻响应第三方支付平台。库存回退处理消费订单处理失败发送的消息,设计消息幂等问题方...原创 2021-11-12 18:08:37 · 2287 阅读 · 0 评论 -
rocketmq顺序消费问题
场景举例用户下单,付款,发货,完成,每一个步骤发送完成,发送mq消息到下游系统处理(消费客户端),同一个订单要保证顺序消费。mq实现思路选择mq顺序消息,实现思路,生产者:发送消息的时候保证同一个订单的业务消息,发送到同一个队列;订单号对队列总和取模,找到指定队列消费者:每一个消费线程可以保证只消费一个队列的消息,怎么保证消费线程,只消费一个队列的消息原理...可进一步探究代码生产者/** * 顺序消息生产者 */@Slf4jpublic class Ordered原创 2021-11-12 15:07:15 · 1829 阅读 · 0 评论 -
RocketMQ之一:RocketMQ整体介绍
https://rocketmq.apache.org/以上为官网地址请访问原文:RocketMQ之一:RocketMQ整体介绍 - Oops!# - 博客园常用MQ介绍及对比--《MQ详解及四大MQ比较》RocketMQ环境搭建--《RocketMQ之三:RocketMQ集群环境搭建》RocketMQ物理部署结构RocketMQ的消息存储--《RocketMQ之六:RocketMQ消息存储》RocketMQ各角色基本数据结构RocketMQ生产者发送消息过程Rock转载 2021-11-11 18:05:19 · 749 阅读 · 0 评论 -
docker单机安装rocketmq双主双从
1. 环境准备阿某云:centos 7,47.*.*.*(172.*.*.*),在安全组策略开启8000-9000之间的端口访问权限。注意一定要开放安全组端口,否则无法访问console控制台2. 创建目录mkdir -p /usr/local/rocketmq/logs/nameserver-1mkdir -p /usr/local/rocketmq/logs/nameserver-2mkdir -p /usr/local/rocketmq/logs/broker-master-1原创 2021-11-05 17:33:34 · 491 阅读 · 1 评论 -
消息队列连环炮
消息队列的面试连环炮前言你用过消息队列么?说说你们项目里是怎么用消息队列的?我们有一个订单系统,订单系统会每次下一个新订单的时候,就会发送一条消息到ActiveMQ里面去,后台有一个库存系统,负责获取消息,然后更新库存。为什么使用消息队列?你的订单系统不发送消息到MQ,而是直接调用库存系统的一个接口,然后直接调用成功了,库存也更新了,那就不需要使用消息队列了呀使用消息队列的主要作用是:异步、解耦、削峰消息队列都有什么优缺点?Kafka、activeMQ、RibbitMQ、RocketMQ都转载 2021-11-02 12:55:09 · 124 阅读 · 0 评论 -
RocketMQ
官网地址:https://github.com/alibaba/spring-cloud-alibaba/tree/master/spring-cloud-alibaba-examples/rocketmq-example依赖:maven<dependency> <groupId>org.apache.rocketmq</groupId&g...原创 2018-12-30 15:46:43 · 156 阅读 · 0 评论