一、环境配置
阿里云:CentOS 8.3 64位
JDK:JDK 1.8.0_311
RocketMQ:RocketMQ 4.9.2
rocketmq-dashboard : 1.0.1
二、安装RocketMQ
2.1、安装RocketMQ
RocketMQ 4.9.2 官网地址:
[root@jeespring ~]# wget https://dlcdn.apache.org/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip
[root@jeespring ~]# unzip rocketmq-all-4.9.2-bin-release.zip -d /usr/local/
[root@jeespring ~]# cd /usr/local/rocketmq-4.9.2/
2.2、修改 bin/runserver.sh
Name Server 默认启动内存比较大,需要修改一下内存配置参数
修改 bin/runserver.sh 配置文件,建议两处都修改,一个是jdk9之前的,一个是jdk9之后的配置,默认Xms和Xmx都是4g,可以修改成适合服务器配置的值。
修改成
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=160m"
2.2、修改 bin/runbroker.sh
Broker默认启动内存8g,可以修改成适合服务器配置的值。
修改为:
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m"
2.3、修改conf/broker.conf
修改broker.conf 只需要配置 namesrvAddr 和 brokerIP1的地址即可。
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr = {阿里云公网IP}:9876
brokerIP1 = {阿里云公网IP}
rocketmq数据默认的存储在${user.home}目录下,如果想修改commitlog的存储位置,可以在broker.conf 配置存储文件中配置 commitlog 存储路径
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr = {阿里云公网IP}:9876
brokerIP1 = {阿里云公网IP}
storePathRootDir = /usr/local/rocketmq-4.9.2/store
storePathCommitLog = /usr/local/rocketmq-4.9.2/store/commitlog
配置完成需要在 rocketmq 根目录创建文件夹,否则启动会报错。
[root@jeespring rocketmq-4.9.2]# mkdir -p store/commitlog
broker的配置参数说明如下:
三、启动RocketMQ
3.1、启动Name Server
返回到rocketmq-4.9.2目录,启动nameserver
[root@jeespring rocketmq-4.9.2]# nohup sh bin/mqnamesrv &
3.2、启动Broker
返回到rocketmq-4.9.2目录,启动broker
[root@jeespring rocketmq-4.9.2]# nohup sh bin/mqbroker -c conf/broker.conf &
启动结果如下
查看启动日志是否启动成功
3.3、自定义启动脚本
name server和broker 启动脚本过长,不太容易记忆,可以在根目录下面新建2个启动脚本,方便下次启动。
echo "nohup sh bin/mqnamesrv &">> nameserver-start.sh
echo "nohup sh bin/mqbroker -c conf/broker.conf &">> broker-start.sh
chmod 777 nameserver-start.sh
chmod 777 broker-start.sh
以后启动可以使用 nameserver-start.sh 和 broker-start.sh 启动rocketmq了
四、阿里云配置
4.1、关闭防火墙
系统中,关于如何开启防火墙、关闭防火墙、查看防火墙运行状态,请参考以下信息:
- 开启防火墙
systemctl start firewalld.service
- 关闭防火墙
systemctl stop firewalld.service
- 查看防火墙运行状态
firewall-cmd --state
4.2、配置安全组
外网访问RocketMQ,还需要在阿里上面新增安全组配置
配置安全组放行端口:9876、10911、10909 三个端口。
4.3、测试消息发送
本地代码测试往阿里云发送消息
public class Producer {
public static void main(String[] args) throws Exception {
DefaultMQProducer producer = new DefaultMQProducer("producer-group");
producer.setNamesrvAddr("阿里云公网IP:9876");
producer.start();
for (int i = 0; i < 10; i++) {
//public Message(String topic, String tags, byte[] body)
String msg = "同步消息-" + i;
Message message = new Message("simple-message","sync",msg.getBytes(RemotingHelper.DEFAULT_CHARSET));
SendResult sendResult = producer.send(message);
System.out.println(JSON.toJSONString(sendResult));
}
producer.shutdown();
}
}
此时阿里云store目录已经有了数据