最近项目需要使用RocketMQ,之前没有使用过,现在花点时间来学习下,顺便记录下学习过程。目前没有去找其他资源,先参照下官网文档学学看。
Quick Start
基本上都是这套路,先照着Quick Start画个瓢。这里,Quick Start的目的是让使用者在本机快速地搭建RocketMQ系统,并且能够收发消息。对于系统以及软件的要求,官网说的很明确,下面列一下我本机的环境:
|
|
参照下来,满足要求了。下面一步是把RocketMQ下载下来,Quick Start中使用的方式是直接clone代码,然后自己build。直接clone的代码是最新的,我们保守点,还是下载最新的release版本,目前最新版是rocketmq-4.0.0-incubating。下载下来之后执行如下步骤,当然下载目录和安装目录按自己喜好来。
上面最后一步有可能会出编译失败,我这边遇到的问题是,可能因为之前的不当修改导致hostname对应ip不是当前的有效ip,最终导致common项目下的MixAllTest.testGetLocalInetAddress()方法测试不通过。当然,遇到的问题可能会不一样,但是仔细看编译错误,会给出提示信息,比如:
我们照着提示信息去看下,发现surefire-reports是个文件夹,里面有一系列txt文件,存放着编译结果。如果不知道具体是哪儿出问题的话,可能需要逐个看下,也没几个文件。而且打印出来的错误也比较详细,相信很容易就能问题。我这边把hostname对应的ip改成127.0.0.1之后,就能顺利编译完成了。
最后把编译完的程序包拷贝到安装目录:
启动 Name Server
到这一步时RocketMQ已经成功编译好了,执行下面的步骤,可以启动Name Server。至于这个Name Server的作用是什么,后面再看。
可以看出,RocketMQ默认的log位置在当前用户目录的logs/rocketmqlogs/中,从截取的输出可以看出,Name Server启动成功了。顺便看下~/logs/rocketmqlogs/目录,当前只有两个文件namesrv.log和namesrv_default.log,如果日后Name Server出问题,知道去哪儿看日志。
启动 Broker
下面命令可以启动Broker:
命令执行完之后,笔记本直接卡死了,过了好几分钟有点缓过来。最终看到占用资源的进程:/usr/lib/jvm/jdk1.8.0_91/bin/java -server -Xms8g -Xmx8g…,原来是RocketMQ一个Broker的启动直接申请了8g内存,我电脑内存也才8g。修改下启动脚本bin/runbroker.sh:
修改完之后,启动就正常了,下面看下log:
虽然看log是启动成功了,但是注意下ip,172.17.0.1是安装的docker的ip。官网也有提示说,broker ip不能使用loopback network,也就是不能是127.0.0.1,所以启动的时候自动选择了一个不是回环地址的ip。查了一下,通过broker的brokerip1属性可以手动修改,但是这里暂时不需要修改,知道下有这回事情就可以了。
收发消息
在收发消息之前,我们需要告诉客户端name servers的地址,RocketMQ提供多种配置方式。简单的方式是通过环境变量,在合适的位置添加NAMESRV_ADDR:
消息生产者测试:
消息消费者测试:
停止服务
停止Broker:
停止Name Servers: