Apache RocketMQ 单机版搭建
环境
- jdk1.8
- maven 3.2
- centos7.4 (vobox 虚拟机)
1.下载源码编译
wget http://mirror.bit.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-source-release.zip
unzip rocketmq-all-4.2.0-source-release.zip
cd rocketmq-all-4.2.0
mvn -Prelease-all -DskipTests clean install -U
2.配置jvm
vi bin/runserver.sh
vi bin/runbroker.sh
server -Xms1g -Xmx1g -Xmn512m -XX:PermSize=128m -XX:MaxPermSize=512m"
3.启动
nohup sh bin/mqnamesrv &
tail -f ~/logs/rocketmqlogs/namesrv.log 查看日志
nohup sh bin/mqbroker -n localhost:9876 &
tail -f ~/logs/rocketmqlogs/broker.log
4.运行测试代码
export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId= ...
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_%d Receive New Messages: [MessageExt..
5.运行测试代码(外部机器)
public class Producer {
public static void main(String[] args) throws Exception {
DefaultMQProducer defaultMQProducer = new DefaultMQProducer("mq_test");
defaultMQProducer.setNamesrvAddr("192.168.56.102:9876");
defaultMQProducer.start();
for (int i = 0; i <100; i++) {
Message message = new Message();
message.setTopic("TopicTest");
message.setTags("TagA");
message.setBody(("hi come "+i).getBytes(RemotingHelper.DEFAULT_CHARSET));
SendResult sendResult = defaultMQProducer.send(message);
System.out.println(sendResult.toString());
}
defaultMQProducer.shutdown();
}
}
public class Consumer {
public static void main(String[] args) throws InterruptedException, MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer1");
consumer.setNamesrvAddr("192.168.56.102:9876");
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
consumer.subscribe("TopicTest", "*");
consumer.registerMessageListener(new MessageListenerConcurrently() {
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
ConsumeConcurrentlyContext context) {
System.out.println(Thread.currentThread().getName() + " Receive New Messages: ");
msgs.forEach(item->{
System.out.println(new String(item.getBody()));
});
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
System.out.println("Consumer Started.");
}
}
6.异常错误
异常1
Exception in thread "main" org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest
解决办法
关闭虚拟机的防火墙
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
异常2
Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <10.0.2.5:10911> failed
原因:因为在vbox中设置了两张网卡 导致rocketmq 识别出错
解决办法:直接在vbox 只启用一块网卡 重启 ok