RocketMQ安装使用及基本原理
前言
RocketMQ官网
RocketMQ是阿里巴巴基于Kafka所做的消息中间件。
安装
单机安装
1、下载zip包
2、unzip rocketmq-all-4.8.0-bin-release.zip
3、进入bin目录普通启动./mynamesrv
./mqbroker
后台模式启动
#需要先启动Name Server(注册中心)
nohup ./rocketmq-all-4.8.0-bin-release/bin/mqnamesrv > /dev/null 2>1 &
#需要指定Server地址用于注册
nohup ./rocketmq-all-4.8.0-bin-release/bin/mqbroker -n (本机ip):9876 autoCreateTopicEnable=true > /dev/null 2>1 &
查看服务 ps -ef|grep mq
测试发消息和接受消息服务是否成功
bin目录下执行sh tools.sh org.apache.rocketmq.example.quickstart.Producer
和 sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
注:环境中必须有JDK且JDK必须是1.8以上
RocketMQ配置默认是生产环境配置,设置的jvm的内存值较大,如果想修改默认值可以找runserver.sh和runbroker.sh文件,编辑
JAVA_OPT=”${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:MetaspaceSize=128m -
XX:MaxMetaspaceSize=320m”
配置/etc/profile文件添加export NAMESRV_ADDR=(本机ip):9876
刷新配置source /etc/profile
docker安装
#搜索有哪些docker容器可以使用,这里选择docker.io/foxiswho/rocketmq 4.5.1版本
docker search rocketmq
docker pull foxiswho/rocketmq:broker-4.5.1
docker pull foxiswho/rocketmq:server-4.5.1
#创建server
docker run -di -p 9876:9876 --name=rmqserver01 -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" -e "JAVA_OPTS=-Duser.home=/opt" foxiswho/rocketmq:server-4.5.1
#创建broker
docker run -di -p 10911:10911 -p 10909:10909 --name=rmqbroker01 -e "JAVA_OPTS=-Duser.home=/opt" -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" foxiswho/rocketmq:broker-4.5.1
#配置broker
#docker inspect rmqbroker #查看ipaddress 不用
docker exec -it rmqbroker01 /bin/bash
cd /etc/rocketmq/
vim broker.conf
#添加如下
#brokerIP1 = [ipaddress地址] 不用
brokerIP1 = [本机的ip]
namesrvAddr = [本机的ip]
docker下RocketMQ管理工具安装
#拉取镜像
docker pull styletang/rocketmq-console-ng:1.0.0
#创建并启动容器
docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=[namesrvAddr地址]:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8082:8080 -t styletang/rocketmq-console-ng:1.0.0
可以在ip:8082进行访问
RocketMQ
**MQ(Message Queue)**消息队列是基础数据结构中先进先出的数据结构。在消息传输过程中保存消息的容器,使生产者和消费者不直接通讯,依靠队列保证消息的可靠性,避免系统间相互影响。
producer->queue->consumer
MQ作用及缺点
一、作用
异步解耦,削峰填谷
1、异步解耦
订单系统与支付、库存、物流系统的联系,中间添加MQ,各个子系统用松耦合方式通信,当某个系统宕机后,(服务降级),其他系统依然可以使用。即是异步解耦
2、削峰填谷
在高并发情况下使请求进行排队等待,保证系统的稳定性。
3、其他
顺序收发
分布式事务一致性
大数据分析
分布式缓存同步
二、缺点
不能完全代替RPC
系统可用性降低
系统的复杂度提高
一致性问题
MQ相关产品
业界的MQ有Kafka、RabbitMQ、ActiveMQ、ApachePulsar
特性 | ActiveMQ | RabbitMQ | RocketMQ | Kafka |
---|---|---|---|---|
开发语言 | java | erlang | java | scala |
吞吐量 | 万级 | 万级 | 十万级 | 十万级 |
时效性 | 毫秒级 | 微秒级 | 毫秒级 | 毫秒级 |
可用性 | 高,基于主从架构 | 高,基于主从架构 | 非常高,基于分布式架构 | 非常高,分布式架构 |
消息可靠性 | 有较低概率丢失 | 经过参数优化,可以零丢失 | 经过参数优化,可以零丢失 | |
客户端语言 | Java、c++、python | java | java、c++、go、python | |
应用 | 用于解耦和异步,较少用于大规模吞吐 | 都有使用 | 用于大规模吞吐、复杂业务中 | 在大数据的实时计算和日志采集中被大规模使用,是业界标准 |
消息方式 | RocketMQ | RabbitMQ | Kafka |
---|---|---|---|
顺序消息 | 支持 | 支持 | 支持 |
延时消息 | 不支持 | 只支持特定Level | 不支持 |
事务消息 | 不支持 | 支持 | 不支持 |
消息过滤 | 不支持 | 支持 | 支持 |
消息查询 | 不支持 | 支持 | 不支持 |
消息失败重试 | 支持 | 支持 | 不支持 |
批量发送 | 不支持 | 支持 | 支持 |
总结:
只普通使用推荐RabbitMQ
在阿里云部署或想自主改造MQ推荐RocketMQ
大数据、日志、流式推荐Kafka
生产者发送消息的方式
一、普通消息
1、同步
发送完消息后接受返回成功或失败的结果,在接收结果前进行等待同步
2、异步
发送完消息后会接收结果,但不影响继续运行
底层new Runnable进行执行任务
3、单向
发完消息后不接收返回结果
发送方式 | 发送TPS | 发送结果反馈 | 可靠性 |
---|---|---|---|
同步发送 | 快 | 有 | 不丢失 |
异步发送 | 快 | 有 | 不丢失 |