• 准备工作

  • 3个虚拟机节点的构成如下

  • 安装步骤

  • 操作过程

1、安装包已经上传至其中1个节点。

2、解压缩安装包

命令:unzip rocketmq-all-4.0.0-incubating-bin-release.zip

解压缩之后如下:

3、 我这里将解压缩之后的文件夹移动了位置,并修改了名字,以便后续操作。

命令: mv /home/hadmin/software/apache-rocketmq-all/ /home/hadmin/rocketmq

移动之后路径如下:

4、修改配置文件

我这里已经将配置文件提前准备好了,只呈现以下配置文件的结果。

默认配置可以参考源码:

https://github.com/apache/rocketmq/blob/master/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java

Tips1:

autoCreateTopicEnable,建议线下开启,线上关闭。

Tips2:

同一个机器上有多个Broker时,各个Broker的文件路径要独立。

■节点1(192.168.6.3)配置文件:

《broker-a-m.properties》

brokerClusterName=post
brokerName=broker-a
namesrvAddr=192.168.6.3:9876;192.168.6.4:9876
brokerId=0
listenPort=10911
brokerIP1=192.168.6.3
deleteWhen=04
fileReservedTime=72
brokerRole=ASYNC_MASTER
storePathRootDir=/home/hadmin/data/rocketmq/rootdir-a-m
storePathCommitLog=/home/hadmin/data/rocketmq/commitlog-a-m
defaultTopicQueueNums=4
autoCreateTopicEnable=false
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH

《broker-c-s.properties》

brokerClusterName=post
brokerName=broker-c
namesrvAddr=192.168.6.3:9876;192.168.6.4:9876
brokerId=1
listenPort=10920
brokerIP1=192.168.6.3
deleteWhen=04
fileReservedTime=72
brokerRole=SLAVE
storePathRootDir=/home/hadmin/data/rocketmq/rootdir-c-s
storePathCommitLog=/home/hadmin/data/rocketmq/commitlog-c-s
defaultTopicQueueNums=4
autoCreateTopicEnable=false
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH

■节点2(192.168.6.4)配置文件:

《broker-a-s.properties》

brokerClusterName=post
brokerName=broker-a
namesrvAddr=192.168.6.3:9876;192.168.6.4:9876
brokerId=1
listenPort=10920
deleteWhen=04
brokerIP1=192.168.6.4
fileReservedTime=72
brokerRole=SLAVE
storePathRootDir=/home/hadmin/data/rocketmq/rootdir-a-s
storePathCommitLog=/home/hadmin/data/rocketmq/commitlog-a-s
defaultTopicQueueNums=4
autoCreateTopicEnable=false
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH

《broker-b-m.properties》

brokerClusterName=post
brokerName=broker-b
namesrvAddr=192.168.6.3:9876;192.168.6.4:9876
brokerId=0
listenPort=10911
brokerIP1=192.168.6.4
deleteWhen=04
fileReservedTime=72
brokerRole=ASYNC_MASTER
storePathRootDir=/home/hadmin/data/rocketmq/rootdir-b-m
storePathCommitLog=/home/hadmin/data/rocketmq/commitlog-b-m
defaultTopicQueueNums=4
autoCreateTopicEnable=false
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH

■节点3(192.168.6.5)配置文件:

《broker-b-s.properties》

brokerClusterName=post
brokerName=broker-b
namesrvAddr=192.168.6.3:9876;192.168.6.4:9876
brokerId=1
listenPort=10920
brokerIP1=192.168.6.5
deleteWhen=04
fileReservedTime=72
brokerRole=SLAVE
storePathRootDir=/home/hadmin/data/rocketmq/rootdir-b-s
storePathCommitLog=/home/hadmin/data/rocketmq/commitlog-b-s
defaultTopicQueueNums=4
autoCreateTopicEnable=false
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH

《broker-c-m.properties》

brokerClusterName=post
brokerName=broker-c
namesrvAddr=192.168.6.3:9876;192.168.6.4:9876
brokerId=0
listenPort=10911
brokerIP1=192.168.6.5
deleteWhen=04
fileReservedTime=72
brokerRole=ASYNC_MASTER
storePathRootDir=/home/hadmin/data/rocketmq/rootdir-c-m
storePathCommitLog=/home/hadmin/data/rocketmq/commitlog-c-m
defaultTopicQueueNums=4
autoCreateTopicEnable=false
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH

5、启动nameserver

启动命令:nohup sh /home/hadmin/rocketmq/bin/mqnamesrv >/home/hadmin/rocketmq/logs/mqnamesrv.log 2>&1 &

注意:我这里将启动日志重定义到了logs路径下,需要提前手动创建logs文件夹,以便于统一管理日志,方便查看。

创建文件夹命令:mkdir /home/hadmin/rocketmq/logs

下图中展示了启动命令,日志中可以看到NameServer成功启动的日志。

■NameServer - 节点1

■NameServer = 节点2

6、启动Broker-a(Master位于节点1、Slave位于节点2)

broker-a分为Master和Slave,分别位于节点1和节点2上,需要分别启动。

注意:需要根据启动角色,为broker指定一个配置文件。

■broker-a的master - 节点1

命令: nohup sh /home/hadmin/rocketmq/bin/mqbroker -c /home/hadmin/rocketmq/conf/broker-a-m.properties >/home/hadmin/rocketmq/logs/broker-a-m.log 2>&1 &

■broker-a的slave - 节点2

命令:nohup sh /home/hadmin/rocketmq/bin/mqbroker -c /home/hadmin/rocketmq/conf/broker-a-s.properties >/home/hadmin/rocketmq/logs/broker-a-s.log 2>&1 &

■验证broker-a:

broker-a启动结束,这时候可以使用命令查看一下rocketmq集群状态。

命令:sh /home/hadmin/rocketmq/bin/mqadmin clusterList -n 192.168.6.3:9876

7、启动broker-b(Master位于节点2,、Slave位于节点3)

■broker-b的Master - 节点2

命令:nohup sh /home/hadmin/rocketmq/bin/mqbroker -c /home/hadmin/rocketmq/conf/broker-b-m.properties >/home/hadmin/rocketmq/logs/broker-b-m.log 2>&1 &

■broker-b的Slave - 节点3

命令:nohup sh /home/hadmin/rocketmq/bin/mqbroker -c /home/hadmin/rocketmq/conf/broker-b-s.properties >/home/hadmin/rocketmq/logs/broker-b-s.log 2>&1 &

■验证broker-b

命令:sh /home/hadmin/rocketmq/bin/mqadmin clusterList -n 192.168.6.3:9876

8、 启动broker-b(Master位于节点3,、Slave位于节点1)

■broker-c的Master - 节点3

命令:nohup sh /home/hadmin/rocketmq/bin/mqbroker -c /home/hadmin/rocketmq/conf/broker-c-m.properties >/home/hadmin/rocketmq/logs/broker-c-m.log 2>&1 &

■broker-c的Slave - 节点1

命令:nohup sh /home/hadmin/rocketmq/bin/mqbroker -c /home/hadmin/rocketmq/conf/broker-c-s.properties >/home/hadmin/rocketmq/logs/broker-c-s.log 2>&1 &

■验证broker-c

命令:sh /home/hadmin/rocketmq/bin/mqadmin clusterList -n 192.168.6.3:9876

  • 问题1:

启动broker的时候提示内存不够的错误。

解决方法:由于个人电脑配置不够,无法为虚拟机申请更大的内存。所以,采用修改broker启动内存的方式解决了。

修改文件路径:{ROCKET_HOME}/bin/runbroker.sh

修改前:JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"

修改后:JAVA_OPT="${JAVA_OPT} -server -Xms1024m -Xmx1536m -Xmn1546m"

如图所示:

重新启动broker,日志中没有错误,jps进程中也可以看到broker正常启动。

  • 问题2:

在同一台机器上启动多个broker的时候提示如下错误。

问题原因:

按照本文最开始的额图片所示,同一台机器上会存在两个Broker,如果不进行特殊指定,broker的默认端口是10911。

所以一台机器上启动两个broker时,第二个broker就会出现端口被占用的错误。

解决办法:

修改rocketmq的配置文件,增加listenPort配置。配置之后如下所示:

→同一台机器的配置文件

→broker-a-m.properties

→broker-c-s.properties

使用jps查看一下进程是否有问题

在查看一下启动日志是否有问题

最后使用clusterList命令来验证一下集群健康状态。

命令:sh bin/mqadmin clusterList -n 192.168.6.3:9876

成功实现了,如本文最开始图片所示的安装部署。

  • 使用程序测试

编写了java程序代码尝试向集群中生产消息,程序代码如下:

需要注意的是,如果autoCreateTopicEnable=false的时候,需要自己手动创建Topic。

命令样例:sh $MQ_HOME/bin/mqadmin updateTopic -c post -n "192.168.1.80:9876;192.168.1.81:9876" -t QCH2 -r 4 -w 4

package post;import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.exception.RemotingException;import java.util.UUID;public class ProducerTest {private static DefaultMQProducer producer = null;public static void main(String[] args) {System.out.print("[----------]Start");boolean result = false;try {ProducerStart();SendMessage("qch_20170706", "hello rocketmq!");}finally {producer.shutdown();}System.out.print("[----------]Succeed");}private static boolean ProducerStart() {producer = new DefaultMQProducer("pro_qch_test");producer.setNamesrvAddr("192.168.6.3:9876;192.168.6.4:9876");producer.setInstanceName(UUID.randomUUID().toString());producer.setVipChannelEnabled(false);try {producer.start();} catch (MQClientException e) {e.printStackTrace();return false;}return true;}private static boolean SendMessage(String topic, String str) {Message msg = new Message(topic, str.getBytes());try {producer.send(msg);} catch (MQClientException | RemotingException | MQBrokerException | InterruptedException e) {e.printStackTrace();return false;}return true;}
}

运行之后,日志中提示下面的错误:

问题原因:

因为broker部署在虚拟机,并且虚拟双网卡,client无法正常连接服务端。

解决方法:

可以在broker的配置文件中配置brokerIP1(本机IP)属性。

修改后配置文件如下图所示:

修改之后,重新启动rocketmq集群,运行生产者程序,确认正常结束。

然后,有尝试这编写消费者代码,验证是否可以正常消费。结果正常,这里贴一下代码及结果日志。

package post;import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.MessageExt;import java.util.List;
import java.util.UUID;public class ConsumerTest {public static void main(String[] args) {DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("con_qch_test");consumer.setInstanceName(UUID.randomUUID().toString());consumer.setConsumeMessageBatchMaxSize(32);consumer.setNamesrvAddr("192.168.6.3:9876;192.168.6.4:9876");consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);consumer.registerMessageListener(new MessageListenerConcurrently() {@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {for(MessageExt me : list) {System.out.print(new String(me.getBody()));}return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}});try {consumer.subscribe("qch_20170706", "*");consumer.start();} catch (Exception e) {e.printStackTrace();}}
}

样例代码上传到了git上了,有需要的可以去参考。

https://github.com/quchunhui/rocketmq_sample

--END--

转载于:https://www.cnblogs.com/quchunhui/p/7126868.html

rocketmq安装部署过程(4.0.0版本)相关推荐

  1. rocketmq集群安装部署过程(4.0.0版本)、安装中的常见问题举例

    本篇博文参考:http://www.cnblogs.com/quchunhui/p/7126868.html,然后按照自己的环境进行重新编写 准备工作: 下载rocketmq-all-4.0.0-in ...

  2. 在使用ambari进行安装部署过程中遇到的glibc问题

    在使用ambari进行安装部署过程中遇到的glibc问题 使用 yum check rpm -e rpm -q 处理问题 报错信息如下: stderr: Traceback (most recent ...

  3. 免费开源的客服系统 Linux 服务器环境安装部署过程

    最近因为项目需要,要找一款在线客服系统集成在 APP 中使用,而且涉及到生意开单,客服系统必须稳定可靠.另外甲方要求,必须支持 Linux 服务器环境. 我们以 Ubuntu 18.04 为例把安装部 ...

  4. ubuntu16.4安装部署过程

    以下是ubuntu16.4安装部署过程,之前每次安装都要去找半天过程,所以自己整理了一下. 有的人可能没有这一步,无妨,继续向下 这是在给你自动配置一些东西,如果你想手动自己配置,可以选择中断,下面的 ...

  5. FFmpeg入门详解之127:GB28181平台安装部署过程 - 可接入海康、大华、华为、科达、宇视等等设备和平台

    本文章向大家介绍GB28181平台安装部署过程 - 可接入海康.大华.华为.科达.宇视等等设备和平台,主要包括GB28181平台安装部署过程 - 可接入海康.大华.华为.科达.宇视等等设备和平台使用实 ...

  6. mysql 5.6 64 位安装 缺少libai.so_CentOS6.7安装部署LNMP(nginx1.8.0+php5.6.10+mysql5.6.12) 法外狂徒...

    IP-10.0.0.8 1.安装nginx mkdir -p /server/tools cd /server/tools yum install -y pcre pcre-devel openssl ...

  7. 三套JSP源代码的安装部署过程和遇到的问题图解

    三个源码下载自源码之家: Maven和3个源码也可在此下载: http://pan.baidu.com/s/1qYnK784 一 jspxcms 其源码说明如下: # Jspxcms源码搭建说明_ma ...

  8. 芋道 RocketMQ 安装部署

    点击上方"芋道源码",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2020 超神之路,很肝~ 中文详细注释的开源项目 RP ...

  9. Kubernetes1.91(K8s)安装部署过程(一)--证书安装

    安装前忠告:如果你用的是虚拟机,强烈不建议你使用克隆(链接克隆)的方式,至于完整克隆不知道有没有问题,每一台全新安装centos7系统最好. 一.安装前主题环境准备 1.docker安装 建议使用官网 ...

最新文章

  1. Exchange Server 2019新功能预览-揭秘被削减的功能
  2. 什么是计算机网络?—Vecloud微云
  3. 工作四年的php程序员自述 一路走过来的风风雨雨
  4. Ribbon、Feign、OpenFeign、spring-cloud-openfeign的区别
  5. Ayoub and Lost Array
  6. ASP.NET 应用程序遭遇Server Application Unavailable问题的解决的方法
  7. linux shell if语句使用方法
  8. 程序包com.sun.istack.internal不存在
  9. javaI/O流小结
  10. DELL服务器故障代码.xlsx
  11. jquery ajax html php区别,ajax与jquery的区别是什么
  12. SQlite数据库的C编程接口(六) 返回值和错误码(Result Codes and Error Codes) ——《Using SQlite》读书笔记
  13. paip.提升开发效率--使用拼音
  14. 作为IT男必须会Linux服务器被攻击后如何处理!网友:这个要会!
  15. matlab 换热器仿真,基于MATLAB的换热器温度控制仿真研究.doc
  16. 复旦大学2018--2019学年第二学期(18级)高等代数II期末考试第八大题解答
  17. 一、64位windows 安装mysql
  18. 不上火勤眨眼远离干眼症
  19. 【数学基础】直线点法式方程表达
  20. python 写天干地支

热门文章

  1. php中将excel写入mysql数据库的示例
  2. libevent备忘
  3. c 怎么配置oracle,cjdbc入门配置oracle
  4. 简述一下索引的匹配原则_Mysql联合索引最左匹配原则
  5. ajax前台转换json数据库,基于jQuery的ajax功能实现web service的json转化
  6. mgg mysql_MYSQL基础命令
  7. Spring学习之旅(二):Bean的高级装配之解决装配歧义性
  8. java netty socket_Netty对socket的抽象
  9. 云控参数下发android,Oldboot鬼影又现,另一例山寨手机中运用云端远控技术的木马...
  10. php 连接 onenet,arduino一直连接不上onenet