RocketMQ
文章平均质量分 74
想着你就无比幸福
这个作者很懒,什么都没留下…
展开
-
RocketMQ重复消费问题排查历程
版本:4.2.0,源码:class文件问题描述:生产环境日志目录使用的默认配置,MQ启动用户的家目录可用空间设置的大小有限制,随着时间的推移可用空间不足,决定修改日志目录,MQ的logback_*.xml配置的默认路径${user.home}全局替换为/data,然后重启MQ,生产环境使用的双master,分别是19和20服务器,运维在重启的时候先停止的19号服务器的MQ一分二十秒之后启动MQ,五分钟之后停止20号服务器MQ,再启动20号服务器MQ。启动使用的命令:nohup sh mqna原创 2021-02-01 15:44:48 · 1617 阅读 · 1 评论 -
RocketMQ Broker 快速失败机制
版本:4.2.0,源码:class文件broker的快速失败机制是为了防止请求过载,导致broker处理请求效率变低,从而影响消息的消费broker启动的时候会初始化brokerFastFailurethis.brokerFastFailure = new BrokerFastFailure(this);this.brokerFastFailure.start();brokerFastFailurepublic void start() { this.sch...原创 2021-02-01 12:08:22 · 416 阅读 · 0 评论 -
RocketMQ Broker 消息拉取原理
版本:4.2.0,源码:class文件consumer拉取消息发送请求的RemotingCommand的code为11RemotingCommand request = RemotingCommand.createRequestCommand(11, requestHeader)broker启动时会注册一系列的processorBrokerControllerpublic boolean initialize() throws CloneNotSupportedException {原创 2021-02-01 11:12:41 · 753 阅读 · 0 评论 -
RocketMQ NameServer
版本:4.2.0,源码:class文件NameServer启动源码分析:NameServer通过main方法启动public static void main(String[] args) { main0(args);}public static NamesrvController main0(String[] args) { System.setProperty("rocketmq.remoting.version", Integer.toString(MQVersi...原创 2021-01-25 10:59:43 · 128 阅读 · 0 评论 -
RocketMQ Consumer 顺序消费
版本:4.2.0RocketMQ消费可以分为并发消费和顺序消费。顺序消费顾名思义就是按照发送的顺序消费消息,一般的业务需求用MessageListenerConcurrently就可以了。有些特殊的业务需求可能需要保证消息的消费是有序的,比如binlog同步等等,那么就用到MessageListenerOrderly,仅仅用MessageListenerOrderly就能保证顺序消费吗?可能也许应该能吧?其实只需要写个单元测试就能测试出来,多试几次。既然不能保证那为啥要搞个Message原创 2021-01-22 10:11:17 · 1006 阅读 · 0 评论 -
RocketMQ Consumer 消费流程
版本:4.2.0消息通过producer发送到broker,broker缓存到本地磁盘,consumer怎么得到消息?两种方法:1.broker将消息发送到consumer2.consumer请求broker得到消息这两种方式就是MQ的推模型和拉模型,RocketMQ选择的是拉模型,拉取消息的好处在于consumer清楚自己的消费能力,每次拉取的消息不会超出自己的消费能力,消费完再拉取下一批。Consumer启动之后就会自动的消费消息,作为coder,我们并没有写多余的代码去请求br原创 2021-01-21 15:08:33 · 879 阅读 · 0 评论 -
RocketMQ Producer 重试机制
版本:4.2.0producer的重试机制分两种情况:同步发送,异步发送同步发送:private SendResult sendDefaultImpl(Message msg, CommunicationMode communicationMode, SendCallback sendCallback, long timeout) throws MQClientException, RemotingException, MQBrokerException, InterruptedExcepti原创 2021-01-18 10:41:36 · 437 阅读 · 0 评论 -
RocketMQ Producer 发送消息时如何选择broker - 故障篇
版本:4.2.0producer在发送消息之前并不知道broker的健康状态,如果broker正在繁忙的处理消息,大量的发送请求会增加broker的负担,MQ为了缓解这个问题增加了broker故障机制,利用发送的时长来预测broker的可用时间默认是关闭的,可以通过这个是打开:defaultMQProducer.setSendLatencyFaultEnable(true);先来看看如何预测broker的不用时间的private SendResult sendDefaultImpl(原创 2021-01-18 09:57:28 · 740 阅读 · 0 评论 -
RocketMQ Producer 发送消息时如何选择broker
版本:4.2.0broker多台的时候producer如何选择一台发送消息呢?producer在发送消息的时候,会选择一个messageQueue,然后会将消息发送到messageQueue所在的brokerprivate SendResult sendDefaultImpl(Message msg, CommunicationMode communicationMode, SendCallback sendCallback, long timeout) throws MQClientExce原创 2021-01-15 17:04:20 · 1225 阅读 · 0 评论 -
RocketMQ Producer 和NameServer建立连接主要做了什么
版本:4.2.0producer与nameServer建立连接主要是拉取topic路由信息MQClientInstance启动的时候会启动一个定时任务this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() { public void run() { try { MQClientInstance.this.updateTopicRouteInfoFromNameServer(...原创 2021-01-15 16:26:43 · 482 阅读 · 0 评论 -
RocketMQ Producer 启动时干了哪些事
版本:4.2.0producer启动代码public void start(boolean startFactory) throws MQClientException { switch(this.serviceState) { case CREATE_JUST: this.serviceState = ServiceState.START_FAILED; //检查producerGroup thi...原创 2021-01-15 16:25:13 · 285 阅读 · 0 评论