rocketmq消息中间件
- rocketmq是高性能、高并发、分布式消息中间件
- rocketmq典型应用场景: 分布式事务、异步解耦
- rocketmq概念模型
- 注1: 对于非广播类的消息,同一条消息只能被consumerGroup中的一个conusmer消费;如果有多个consumerGroup,可以被多个consumerGroup中的任意一台机器消费.
- 注2: broker由topic和messageQueue组成,一个topic可以被一个broker管理,也可以被多个broker管理.
为了保证高可用性,broker会使用一个slave同步master broker,当master broker挂掉了替换上.
- 分布式事务
- rocketmq下载安装使用
-
wget https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.8.0/rocketmq-all-4.8.0-bin-release.zip unzip rocketmq-all-4.8.0-bin-release.zip
-
修改mqbroker.xml中新生代和持久代占用内存大小(默认配置比较高)
# 修改新生代内存 <-XX:NewSize>128M</-XX:NewSize> <-XX:MaxNewSize>128M</-XX:MaxNewSize> # 修改持久代内存 <-XX:PermSize>64M</-XX:PermSize> <-XX:MaxPermSize>64M</-XX:MaxPermSize>
-
修改runbroker.sh文件中java运行内存大小
# 调整java运行内存大小 JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn512m"
-
启动nameserver
nohup sh bin/mqnamesrv &
-
验证nameserver是否启动成功
ps -ef|grep namesrv # nameserver默认启动在9876端口,所以也可以通过这种方式验证 netstat -anp|grep 9876 # 可以通过查看日志方式验证(rocketmq的日志放在根目录的logs目录下) tail -f ~/logs/rocketmqlogs/namesrv.log
-
启动mqbroker
# -n表示指定nameserver地址 nohup sh bin/mqbroker -n localhost:9876 &
-
关闭broker和nameserver
# 关闭namesrv服务 sh bin/mqshutdown namesrv # 关闭broker服务 sh bin/mqshutdown broker
-
指定NAMESRV_ADDR的环境变量
export NAMESRV_ADDR=localhost:9876
-
测试搭建环境是否可用
# producer生产消息到message broker内, 运行之后会自动发送大量的消息,之后就会退出,如下图,result:true表示成功 sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
# 消费者消费消息(从下图可以看出是多线程的) sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
-
创建topic
# bin目录下 # update: 更新和创建topic, -n: nameserver地址, -t: 指定topic名称为stock, -c: 指定集群名称 ./mqadmin updateTopic -n localhost:9876 -t stock -c DefaultCluster
-
rocketmq使用mqadmin命令报
Algorithm HmacSHA1 not available
错误的解决办法
通过java-version
可以看到jdk安装的是open-jdk(可以理解为是精简版的jdk).所以要在bin/tools.sh中添加:${JAVA_HOME}/lib/ext:/usr/lib/jvm/jre-1.8.0-openjdk/lib/ext
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib:${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext:/usr/lib/jvm/jre-1.8.0-openjdk/lib/ext"
-