当前位置:   article > 正文

2020.4.23笔记——RocketMQ应用④_rocketmq broker发消息第一次没有消费,后面正常消费

rocketmq broker发消息第一次没有消费,后面正常消费

消息重发

RocketMQ的消息存在重发机制,如果消费者没有收到消息,那么RocketMQ会规定一段时间之后再把消息重新推送一遍,默认是重发16次。如果16次后消费者依然没有收到消息那么就会认定消息发送失败,这时消息就会进入我们的死信队列。注意广播消息并不会重试。

重发的时间间隔是按照时间延迟级别得来的,重发时间依次变更,如下所示,第一次是1s,第二次是5s…最后是2h,如果超过最大级别那么默认后面都是最大级别
在这里插入图片描述
如果消费者返回的是如下返回值,那么RocketMQ就会开启重试,知道返回成功标志
在这里插入图片描述
在消费者我们可以得到当前的重试次数
在这里插入图片描述
我们可以更改上面的重试时间,打开配置文件
在这里插入图片描述
通过messageDelayLevel参数配置延迟级别(时间)
在这里插入图片描述

对于RocketMQ的其他参数我们可以在官网中查阅
https://rocketmq.apache.org/docs/rmq-deployment/
在这里插入图片描述

我们还可以配置重试次数,不过需要注意的是这里的重试次数是相对于消费者来说独立的,每个消费者可以有不同的重试次数,不过因为一旦发生重试消息就会重新在RocketMQ中推送,对于重试消息只会存在与队列0(第一个队列)中。因为每个消费者消费的队列是不同的(同一组消费者且配置的集群模式),那么所有重试消息都只会被某一个消费者(被分配消费的队列0)消费,而重试次数也只会按照这个消费者设置的来。
在这里插入图片描述

死信队列

上面说了如果消息经过重试依然没有被成功消费,那么消息就会进入死信队列,死信队列的队列名是根据消费者组的组名命名的。

而且一个topic中只有存在过死信消息才会出现死信队列。

下面就是死信队列,其中perm默认是2,就是不能读,6就是可读可写,如果我们需要读取死信队列中的消息,那么需要在控制台中将这个队列的perm属性设置为6。
在这里插入图片描述
消费死信队列,首先通过上面的操作更改读取权限,同样是通过topic名来消费
在这里插入图片描述

集群架构

一般情况下RocketMQ的集群架构如下:
在这里插入图片描述
对于不同的RocketMQ集群来说,一般区别只在于broker集群的搭建,存在三种搭建方式:

  1. 单master,没有slave,容易造成单点故障
  2. 多master,没有slave,单台master机器宕机的情况下,此master上的消息会处于一个不可消费的状态
  3. 多master,多slave,这种集群方式避免了上面两种模式带来的问题,所以这种也是最常用的一种模式

对于第三种多master多slave模式的集群来说还需要考虑复制方式和刷盘方式,首先需要介绍复制和刷盘这两个概念。

  • 主从复制

这个概念很简单,就是主机接收生产者发送过来的消息,然后将消息同步到从机中,RocketMQ提供了两种复制模式:

  1. 异步复制,就是主机首先接收生产者的消息,然后再将消息同步到从机中
  2. 同步复制,就是主机边接受生产者的消息边将消息同步到从机中
  • 刷盘

刷盘就是将内存中的数据持久化到磁盘中,同样RocketMQ也提供了两种刷盘方式:

  1. 同步刷盘,边接收消息边将消息持久化到磁盘中
  2. 异步刷盘,先将消息接收,然后再持久化到磁盘中

在生产环境下一般会采用多master多slave模型的集群,配置上则采用同步复制加上异步刷盘。

这种模式下性能较高,当所有主机宕机了,生产者就无法工作了,但是只要有一个broker没有宕机,消费者依然可以工作。

  • 简单部署

一般会采用下面这种方式部署RocketMQ,2主2从
在这里插入图片描述
在conf文件夹中RocketMQ也给我们提供了三种集群模式的配置文件,其中下面框出来的就是2主2从并且采用同步复制
在这里插入图片描述
下面就是每一个borker的配置,对于一个borker集群来说,只要brokerClusterName配置的是一样的就行了

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# 集群搭建教程地址:https://www.jianshu.com/p/23e04d8178b8


brokerClusterName=sns-rocket-mq-cluster

#broker名字,注意此处不同的配置文件填写的不一样

brokerName=rocketmq-nameserver-1

#brokerId 0 表示 Master,>0 表示 Slave

brokerId=0

# Broker 对外服务的监听端口

listenPort=10911

#nameServer地址,分号分割

# rocketmq-nameserver-1 :改成自己的nameserver地址
namesrvAddr=rocketmq-nameserver-1:9876;rocketmq-nameserver-2:9876

# 删除文件时间点,默认凌晨 4点

deleteWhen=04

#文件保留时间,默认 48 小时

fileReservedTime=72

#Broker role有3种:SYNC MASTERASYNC MASTERSLAVE。关键词SYNCASYNC表示Master和Slave之间同步消息的机制,SYNC即同步更新,指当Slave和Master消息同步完成后,再返回发送成功的状态。ASYNC即异步更新,master与slave有短暂消息延迟,毫秒级。本文在此使用了异步复制集群模式,线上环境推荐使用同步双写模式,即SYNC_MASTER

brokerRole=ASYNC_MASTER

# 刷盘方式 ASYNC_FLUSH 异步刷盘

flushDiskType=ASYNC_FLUSH

#存储路径

storePathRootDir=/data/rocketmq/store/rootdir-a-m

storePathCommitLog=/data/rocketmq/store/commitlog-a-m

# 是否允许 Broker 自动创建Topic

autoCreateTopicEnable=true

# 是否允许 Broker 自动创建订阅组

autoCreateSubscriptionGroup=true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66

下面是配置的主从复制和刷盘的方式
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/603770
推荐阅读
相关标签
  

闽ICP备14008679号