随便说两句:
rocketMQ是阿里云出品,现在并入了apache,所以在最开始找rocketMQ官方库的时候找了半天也没找到,虽然看见好几次apache/rocketMq,但都被我主动略过了,惭愧。
写这篇记录,一是为了刚了解rocketMQ的人能少走一些弯路,二是为了能让我自己以后少走些弯路。
linux用的是wsl2-ubuntu20.04,环境是docker。
一、创建容器
创建
新手入门,创建一个干净的linux环境最好的方式不外乎docker,所以没有ubuntu镜像的先拉取最新的ubuntu镜像:
docker pull ubuntu:20.04
接下来创建容器,rocketMQ可能用到两个端口9876
和8080
,暂时不管这两个端口的作用,先把映射添加上再说:
docker run -itd --name rocketmq -p 8080:8080 -p 9876:9876 ubuntu
配置
一个干净的ubuntu容器因为太干净,啥都没有,在使用时并不方便。
先换阿里云镜像:
sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
安装可能需要用到的软件:
apt update && apt upgrade -y && apt install -y nano curl openjdk-8-jdk git maven unzip
不要自作聪明安装8+的jdk
配置 github 加速:github全局代理或cdn加速 - 简书 (jianshu.com)
添加raw.githubusercontent.com
域名映射:
sudo vim /etc/hosts
添加:
185.199.108.133 raw.githubusercontent.com
可选安装配置vim
:
apt install vim wget
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
wget https://raw.githubusercontent.com/thep0y/vim/master/.vimrc
vim .vimrc
:PluginInstall
可选安装配置zsh
:
参考 linux和macOS安装oh my zsh - 简书 (jianshu.com)
二、下载
既然是阿里云的东西,那阿里云镜像站里肯定有,下面两条命令二选一:
# 编绎好的包
wget https://mirrors.aliyun.com/apache/rocketmq/4.8.0/rocketmq-all-4.8.0-bin-release.zip
# 需要自行编绎的包
wget https://mirrors.aliyun.com/apache/rocketmq/4.8.0/rocketmq-all-4.8.0-source-release.zip
想自行编绎的,参考官方文档:Quick Start - Apache RocketMQ
解压二进制压缩包:
unzip rocketmq-all-4.8.0-bin-release.zip
三、配置
cd rocketmq-all-4.8.0-bin-release
先试一下能不能正常启动nameserver
和broker
服务器。
sh bin/mqnamesrv
sh bin/mqbroker localhost:9876
只是测试用的,有报错的话复制错误信息的关键部分在Issues · apache/rocketmq-client-go (github.com)里通常都能找到解决办法或找到同病相怜之人 。
上面测试通过后,需要修改runserver.sh
和runbroker.sh
里的内存容量部分,在这两个脚本里都搜索-server -Xms
,将其内存分配小点(默认是4G和8G,建议根据比例调整)。
# runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn64m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
四、rocketMQ控制台
控制台在官方扩展库里:
git clone https://github.com/apache/rocketmq-externals.git
设置maven
镜像,不然接下来的编绎会在apache
官方源里下载文件,速度以b计。
nano ~/.m2/settings.xml
粘贴:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<usePluginRegistry/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>central repo</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>apache snapshots</mirrorOf>
<name>阿里云阿帕奇仓库</name>
<url>https://maven.aliyun.com/repository/apache-snapshots</url>
</mirror>
</mirrors>
<proxies/>
<activeProfiles/>
<profiles>
<profile>
<repositories>
<repository>
<id>aliyunmaven</id>
<name>aliyunmaven</name>
<url>https://maven.aliyun.com/repository/public</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>MavenCentral</id>
<url>http://repo1.maven.org/maven2/</url>
</repository>
<repository>
<id>aliyunmavenApache</id>
<url>https://maven.aliyun.com/repository/apache-snapshots</url>
</repository>
</repositories>
</profile>
</profiles>
</settings>
编绎rocketmq-console
:
cd rocketmq-externals/rocketmq-console
mvn clean package -DskipTests
编绎成功后的jar
文件在子目录target
里:
cd target
java -jar rocketmq-console-ng-x.x.x.jar --rocketmq.config.namesrvAddr=127.0.0.1:9876
然后在浏览器地址栏输入网址http://localhost:8080
回车,就进入控制台了。
五、测试
rocketMQ
给我们提供的默认测试工具在bin目录下,叫tools.sh
。我们测试前需要配置这个脚本,为他指定namesrv地址才可以,否则测试发送/消费消息的时候会出现如下错误 connect to null failed:
export NAMESRV_ADDR=localhost:9876
cd cd rocketmq-all-4.8.0-bin-release/bin
# 发送消息
./tools.sh org.apache.rocketmq.example.quickstart.Producer
# 消费消息
./tools.sh org.apache.rocketmq.example.quickstart.Consumer
可以在控制台Message
-TOPIC
-Topic: Topic Test
里查看刚刚发送和消费的信息。