RocketMQ

背景

可靠性最终一致性事物方案,保证正确处理,正确传递

应用的场景:模块与模块的异步调用

一 安装

1.先安装JDK8

2.解压文件

tar -xf jdk-8u212-linux-x64.tar.gz -C /usr/local/

cd /usr/local

3.配置环境变量

vim /etc/profile

# 在文件末尾添加以下内容:
export JAVA_HOME=/usr/local/jdk1.8.0_212
export PATH=$JAVA_HOME/bin:$PATH
 

立即生效:source /etc/profile

4.安装RockerMQ

4.1下载rockerMQ 

wget https://mirror.bit.edu.cn/apache/rocketmq/4.7.0/rocketmq-all-4.7.0-bin-release.zip

4.2 解压 RockerMQ

unzip rocketmq-all-4.7.0-bin-release.zip -d /usr/local/

4.3# 修改一下文件夹名,改成 rocketmq 方便使用 

mv /usr/local/rocketmq-all-4.7.0-bin-release /usr/local/rocketmq

4.4 配置环境变量 ROCKETMQ_HOME 和 PATH

vim /etc/profile

# 在文件末尾添加以下内容: export ROCKETMQ_HOME=/usr/local/rocketmq export PATH=$ROCKETMQ_HOME/bin:$PATH

修改完后, 让环境变量立即生效

source /etc/profile


4.5 减小 rocketmq 使用的内存

修改 name server 内存改为 256m(注册中心,满足自己的注册中心)

cd /usr/local/rocketmq/

# 编辑 bin/runserver.sh
vim bin/runserver.sh

# 找到文件中下面这一行:
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

# 将 -Xms4g -Xmx4g -Xmn2g 修改为 -Xms256m -Xmx256m -Xmn128m
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

4.6 修改 broker 内存改为 256m(收发消息,消息中间件)

# 编辑 bin/runbroker.sh
vim bin/runbroker.sh

# 找到文件中下面这一行:
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"

# 将 -Xms8g -Xmx8g -Xmn4g 修改为 -Xms256m -Xmx256m -Xmn128m
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

 

5.启动 rocketmq

5.1 先启动 name server

# 进入 rocketmq 目录
cd /usr/local/rocketmq/

# 启动 name server
nohup sh bin/mqnamesrv &

# 查看运行日志, 看到"The Name Server boot success."表示启动成功
tail -f ~/logs/rocketmqlogs/namesrv.log
 

5.2在启动brocker

# 启动 broker, 连接name server: localhost:9876
nohup sh bin/mqbroker -n localhost:9876 &

# 查看运行日志, 看到"The broker[......:10911] boot success."表示启动成功
tail -f ~/logs/rocketmqlogs/broker.log 
 

6.关闭防火墙

# 关闭防火墙
systemctl stop firewalld.service

# 禁止防火墙开机启动
systemctl disable firewalld.service
 

7.RocketMQ 的关闭命令

关闭broker     mqshutdown broker

关闭nameserver  mqshutdown namesrv

8.管理界面的搭建

8.1. 克隆项目

cd /usr/local/rocketmq/

# 克隆 rocketmq-externals 项目
git clone https://gitee.com/mirrors/RocketMQ-Externals

8.2  maven打包管理界面项目

如果没有安装 maven, 请先执行 maven 安装命令

yum install -y maven
打包管理界面项目 rocketmq-console.
打包过程中会下载各种依赖,比较缓慢,请耐心等待

# 进入管理界面项目的文件夹
cd RocketMQ-Externals/rocketmq-console

# 执行maven 打包命令, 执行时间较长, 请耐心等待
mvn clean package -Dmaven.test.skip=true
 

8.3运行启动管理界面

# 进入 target 目录
cd target

# 运行管理界面
nohup java -jar rocketmq-console-ng-1.0.1.jar --server.port=8080 --rocketmq.config.namesrvAddr=localhost:9876 &

访问管理界面:

http://192.168.64.141:8080

二 RocketMQ 基本原理

生产者的负载均衡

生产者以轮询的方式向所有写队列发送消息,这些队列可能会分布在多个broker实例上。

消费者的负载均衡

读取队列被均匀分配给这些消费者,它们从指定的队列来接收消息。队列的分配可以采用不同的策略:

1.AllocateMessageQueueAveragely 平均分配

这是默认策略,它是这样分配队列的:

 2.AllocateMessageQueueAveragelyByCircle 环形分配

如果使用环形分配,在消费者的代码中需要设置分配策略

consumer.setAllocateMessageQueueStrategy(new AllocateMessageQueueAveragelyByCircle());

这种分配策略的逻辑很简单,所有0号队列分给0号消费者,所有1号队列分给1号消费者,以此类推。(安照下标相同的方式)


3.AllocateMessageQueueConsistentHash 一致性哈希

如果使用一致性哈希算法进行分配,在消费者的代码中需要设置分配策略

consumer.setAllocateMessageQueueStrategy(new AllocateMessageQueueConsistentHash());


 三  RockerMQ 原生API接收发信息

1.需要的pom依赖:

<dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client</artifactId>
            <version>4.7.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-store</artifactId>
            <version>4.7.1</version>
        </dependency>

2.同步消息模式:

同步消息发送要保证强一致性,发到master的消息向slave复制后,才会向生产者发送反馈信息。

这种可靠性同步地发送方式使用的比较广泛,比如:重要的消息通知,短信通知。(同步就是等待)

3.异步消息

master收到消息立即向生产者反馈,之后在用异步的方式向slave复制消息。异步消息通常用着消息反应灵敏的业务场景,即发送端不能容忍长时间等待Brocker响应。
 

4.单向消息

这种方式主要用在不特别关心发送结果和场景, 例如日志发送

5.顺序消息

  • 同一组有序的消息序列,会被发送到同一个队列,按照 FIFO 的方式进行处理
  • 一个队列只允许一个消费者线程接收消息,这样就保证消息按顺序被接收

 生产者发送消息,把消息发到同一个队列用简单的取余(队列选择器接口)

  消费者只能启动用一个线程处理消息

6.延时消息

息发送到 Rocketmq 服务器后, 延迟一定时间再向消费者进行投递。

使用的场景: 电商提交订单,一直不付款,1小时后自动取消。

7.批量消息

批量发送消息能显著提高传递小消息的性能。限制是这些批量消息应该有相同的topic,相同的waitStoreMsgOK,而且不能是延时消息。此外,这一批消息的总大小不应超过4MB。

8.事务消息

  1. 发送半消息(半消息不会发送给消费者)

  2. 执行本地事务

  3. 提交消息


完成事务消息发送后,消费者就可以以正常的方式来消费数据。

RocketMQ 的自动重发机制在绝大多数情况下,都可以保证消息被正确消费。

假如消息最终消费失败了,还可以由人工处理进行托底。

在看下错误的情况 

  1. 事务执行失败时回滚消息

  2. 服务器无法得知消息状态时,需要主动回查消息状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

没伞的孩子努力奔跑

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

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

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

打赏作者

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

抵扣说明:

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

余额充值