提示:这篇文章可以看看RocketMQ - 阿里云部署、及外网访问的那些个问题
但是我在部署的时候还是遇到些问题,完善一下
一、下载RocketMQ 4.7.1版本
RocketMQ运行版本下载地址: https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip
二、快速安装
没有云服务器的,自己可以进行虚拟机的Linux系统的安装,都一样,本篇不采用docker的方式进行安装,初学还是要采用基本的方式,更能加深对齐理解。
运行RocketMQ需要先安装JDK。我们采用目前最稳定的JDK1.8版本
tar -zxvf jdk-8u171-linux-x64.tar.gz
mv jdk1.8.0_171/ /app/jdk1.8
配置环境变量
export JAVA_HOME=/app/jdk1.8/
PATH=$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin
export PATH
执行 source ~/.bash_profile让环境变量生效。输入java -version能查看到以下内容表明JDK安装成功
把下载的rocketmq-all-4.7.1-bin-release.zip在本地完成解压,并上传到/app/rocketmq目录。完成后,把rocketmq的bin目录也配置到环境变量当中。 vi ~/.bash_profile,加入以下内容,并执行source ~/.bash_profile让环境变量生效:
export JAVA_HOME=/app/jdk1.8/
export ROCKETMQ_HOME=/app/rocketmq/rocketmq-all-4.7.1-bin-release
PATH=$ROCKETMQ_HOME/bin:$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin
export PATH
三、运行
 ## 1 启动NameServer 直接修改runserver.shJAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -
XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=300m"
启动NameServer服务:
nohup bin/mqnamesrv &
NameServer就是broker的管理者,可以理解为和zookeeper差不多
启动完成后,在nohup.out里看到这一条关键日志就是启动成功了
启动Broker
启动Broker的脚本是runbroker.sh。修改默认配置runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"
去conf/broker.conf文件进行添加,代表没有主题自动进行创建
autoCreateTopicEnable=true
然后启动broker
nohup bin/mqbroker &
阿里云服务器的注意:
阿里云服务器以配置文件外网ip启动,避免程序报错
nohup sh bin/mqbroker -n 外网ip:9876 -c /app/rocketmq/rocketmq-all-4.7.1-bin-release/conf/broker.conf &
关于RocketMQ消息集群的搭建,如下
nohup sh bin/mqbroker -c /app/rocketmq/rocketmq-all-4.7.1-bin-release/conf/2m-2s-async/broker-a.properties &
nohup sh bin/mqbroker -c /app/rocketmq/rocketmq-all-4.7.1-bin-release/conf/2m-2s-async/broker-b-s.properties &
nohup sh bin/mqbroker -c /app/rocketmq/rocketmq-all-4.7.1-bin-release/conf/2m-2s-async/broker-b.properties &
nohup sh bin/mqbroker -c /app/rocketmq/rocketmq-all-4.7.1-bin-release/conf/2m-2s-async/broker-a-s.properties &
启动成功:
The broker[iz2ze30i9sf80zvge6srekz, 172.17.36.222:10911] boot success. serializeType=JSON
开关rocketMQ服务
# 1.关闭NameServer
sh bin/mqshutdown namesrv
# 2.关闭Broker
sh bin/mqshutdown broker
# 3 查看进程
ps aux|grep java|grep mq
四、程序简单运行
生产者:
public class Producer {
public static void main(String[] args) throws MQClientException, InterruptedException {
DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");
producer.setNamesrvAddr("云服务器外网ip:9876");
producer.start();
for (int i = 0; i < 2; i++) {
try {
Message msg = new Message("TopicTest" /* Topic */,
"TagA" /* Tag */,
("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
);
//messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
msg.setDelayTimeLevel(3);
/*
* Call send message to deliver message to one of brokers.
*/
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);
} catch (Exception e) {
e.printStackTrace();
Thread.sleep(1000);
}
}
producer.shutdown();
}
}
消费者:
public class Consumer {
public static void main(String[] args) throws InterruptedException, MQClientException {
/*
* Instantiate with specified consumer group name.
*/
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name_4");
consumer.setNamesrvAddr("云服务器外网ip:9876");
/*
* Specify where to start in case the specified consumer group is a brand new one.
*/
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
/*
* Subscribe one more more topics to consume.
*/
consumer.subscribe("TopicTest", "*");
/*
* Register callback to execute on arrival of messages fetched from brokers.
*/
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
ConsumeConcurrentlyContext context) {
System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs);
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
/*
* Launch the consumer instance.
*/
consumer.start();
System.out.printf("Consumer Started.%n");
}
}
可以看到生产者发送了消息,消费者也接收到了消息,我们的单机rocketMQ就搭建成功了