文章目录
- 一、简介
- 二、MQ 下载
- 三、JAVA 环境配置
- 四、MQ 安装
- 五、启动 MQ
- 六、测试
- 七、运行
- 八、关闭 MQ
一、简介
消息队列中间件是分布式系统中的重要组件,主要解决应用耦合、流量削峰等问题,目前主流的 MQ 主要是:RocketMQ、kafka、RabbitMQ等。
RocketMQ 相较于其它 MQ 的优势:
- 支持事务型消息(消息发送和 DB 操作保持两方的最终一致性,RabbitMQ 和 Kafka 不支持)
- 支持结合 RocketMQ 的多个系统之间数据最终一致性(多方事务,二方事务是前提)
- 支持 18 个级别的延迟消息(Kafka 不支持)
- 支持指定次数和时间间隔的失败消息重发(Kafka 不支持,RabbitMQ 需要手动确认)
- 支持 Consumer 端 Tag 过滤,减少不必要的网络传输(即过滤由MQ完成,而不是由消费者完成。RabbitMQ 和 Kafka 不支持)
- 支持重复消费(RabbitMQ 不支持,Kafka 支持)
RocketMQ主要有四大核心组成部分:NameServer、Broker、Producer以及Consumer四部分
二、MQ 下载
官网下载:下载链接
进入是这样子的,这里是 rocketMq 最新版本的下载链接
如果你想下载旧版本的 rocketMq 的话,只需要改网址上的的版本就行,比如说把 4.9.3 改成 4.4.0
三、JAVA 环境配置
rocketmq 需要 Linux 上安装JDK,版本 1.8 以上,如果你 Linux 上已经配置了 Java 环境可跳过。
Linux 上配置 JAVA 环境可参见博客:Linux安装Java环境(OpenJDK)
四、MQ 安装
将下载好的安装包上传至服务器
rz 命令直接上传安装包 (这里我提前在 linux 上创建了一个文件夹 mkdir /soft/rocketmq 来存放管理的软件)
上传至 Linux 之后再解压
命令:unzip rocketmq-all-4.4.0-bin-release.zip
它的目录结构:
- benchmark:这里面就是一些可以直接运行,进行测试的 sh 文件
- bean:该目录是比较常用的,里面是一些可执行文件
- conf:这里面就是一些配置文件
- lib:就是 mq 所依赖的第三方 jar 包
五、启动 MQ
- 启动 NameServer
进入 bin 目录 cd bin/
后台启动 nohup sh mqnamesrv & 或者 nohup ./mqnamesrv &
可以查看日志,看 mq 是否启动成功
tail -f ~/logs/rocketmqlogs/namesrv.log
或者通过端口号查看
netstat -an | grep 9876
- 启动 Broker
在启动之前先修改两个配置
vim runserver.sh
mq 默认需要的内存是比较大的,根据自己 Linux 的内存大小去设置,我这里就改成 256 256 128 了
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
vim runbroker.sh
这里也修改成 256 256 128
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
启动 broker
nohup ./mqbroker -n localhost:9876 &
查看日志检测是否启动成功
tail -f ~/logs/rocketmqlogs/broker.log
又看到日志打印这个就说明启动成功了,注意:不要把它给关了
六、测试
开了两个窗口,都在 mq 的 bin 目录下,一个用于发送消息,一个用于接收消息
- 发送消息
# 声明一个 namesrv 的地址
export NAMESRV_ADDR=localhost:9876
# 发送消息
./tools.sh org.apache.rocketmq.example.quickstart.Producer
PS:如果报错了,可能出现的原因:
- 防火墙没关
可以关闭掉防火墙
# 关闭防火墙
systemctl stop firewalld.service
# 查看防火墙的状态
firewall-cmd --state
# 禁止firewall开机启动
systemctl disable firewalld.service
或者让防火墙开放 MQ 相关的端口
# 开放name server默认端口
firewall-cmd --remove-port=9876/tcp --permanent
# 开放master默认端口
firewall-cmd --remove-port=10911/tcp --permanent
# 开放slave默认端口 (当前集群模式可不开启)
firewall-cmd --remove-port=11011/tcp --permanent
# 重启防火墙
firewall-cmd --reload
- 查下 broker 关掉了
把 nameServer 和 Broker 重新启动,这里我就说 broker 关掉引起的
- 接收消息
# 声明一个 namesrv 的地址
export NAMESRV_ADDR=localhost:9876
# 发送消息
./tools.sh org.apache.rocketmq.example.quickstart.Consumer
七、运行
#新建目录用来存放rocketmq-console的文件
mkdir /usr/local/rocketmq-console
cp target/rocketmq-console-ng-2.0.0.jar /usr/local/rocketmq-console/
#运行jar包
cd /usr/local/rocketmq-console/
java -jar rocketmq-console-ng-2.0.0.jar
运行成功在浏览器输入 http://127.0.0.1:8080 即可看到运行界面,账号密码: admin/admin
- 配置账号密码
我们开启了登录验证的功能,但是没有设置账户密码,这里默认的账户密码为 admin/admin。我们修改下这个密码。
在 rocketmq-console的数据目录下新建账户文件 users.properties 。
vim /usr/local/rocketmq-console/data/users.properties
- 设置账号密码
# 该文件支持热修改,即添加和修改用户时,不需要重新启动console
# 格式, 每行定义一个用户, username=password[,N] #N是可选项,可以为0 (普通用户); 1 (管理员)
#定义管理员
admin=123456,1
#定义普通用户
#user1=user1
#user2=user2
然后我们杀进程,重启这个jar包即可。
八、关闭 MQ
进入 bin
目录下
关闭 NameServer
sh mqshutdown namesrv
关闭 Broker
sh mqshutdown broker