RocketMQ服务搭建_1
rocketmq是阿⾥研发,并贡献给Apache的⼀款分布式消息中间件。
RcoketMQ 是⼀款低延迟、⾼可靠、可伸缩、易于使⽤的消息中间件。
ACE环境:(Adapted communication environment)⾃适配通信环境
ACK:命令应答(Acknowledgement)
rocketMQ参照jms,但是并不遵循jms规范,因此也就不存在activeMQ的createQueue,createTopic进⾏ptp连接,直接负载均衡依托于groupName。
JMS (java message server)的PTP模型:point to point model
BROKER :中继器(代理⼈),即RocketMQ服务,也称provider。
同步刷盘-消息阻塞,能保证数据绝对完整性,异步刷盘-信息丢失,但吞吐量增⼤。
订阅者和发布者情况下,会直接⼴播到group下的所有customer。
RocketMQ作⽤:
解耦合
消峰
异步
消息⼀致性
rocketMQ可做到平均分配,不同于其他的mq有随机性分配。
搭建:
前提要求:
rocketMQ由java编写,因此需要jdk环境。
jdk1.7+,tomcat7.0+,主机64位,
rocketMQ下载解压到指定位置。
在两台主机上创建/etc/hosts地址和名称。
192.168.68.137 rocketmq-nameserver1
192.168.68.138 rocketmq-nameserver2
创建存储路径:
[root@localhost program]# mkdir rocketmq/store
[root@localhost program]# mkdir rocketmq/store/commitlog
[root@localhost program]# mkdir rocketmq/store/consumequeue
[root@localhost program]# mkdir rocketmq/store/index
修改配置⽂件 rocketmq/config:
drwxr-xr-x. 2 root root  4096 Sep 192017 2m-2s-async    //异步复制
drwxr-xr-x. 2 root root  4096 Sep 192017 2m-2s-sync    //同步双写
drwxr-xr-x. 2 root root  4096 Sep 192017 2m-noslave    //双主
如果是搭建双主,则进⼊双主对应的⽂件夹:
修改⽂件rocketmq-a.properties 和 rocketmq-b.properties
可参照⼀下的配置项,注意⽂件夹路径,和nameserver的host名,以及broker-name.
配置说明:
brokerClusterName=rocketmq-cluster      #集名,多个mq集需要使⽤⼀个统⼀的名字,最好是按照
⽰例⾃动给的名字,防⽌⼈为输错,导致集失败。brokerName=broker-a                      #当前主机节点名称,按照mq的惯性进⾏起名,⽐如第⼀个为 brokerName=broker-a,第⼆个⽂件为brokerName=broker-b brokerId=0                                #master节点的ID都为0,>0的数就为Slave。
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876 #⽤于多个nameserver进⾏互相发现,注意多个⽤分号连接,名字和/etc/hosts中保持⼀致。defaultTopicQueueNums=4                  #默认设置1个topic对应4个队列。
autoCreateTopicEnable=true                #是否允许⾃动创建Topic。这种最好设置为false,不然随意注⼊会造成资源⽆形损耗,⽐如我本来消费者只消费T1,T2,
#但是如果传过来的是T3~T100(恶意攻击),则消费不掉,会在mq中进⾏积压,因此建议设置为false. autoCreateSubscriptionGroup=true          #是否允许⾃动创建订阅组,也是同理最好关闭掉,不让⾃发产⽣。
listenPort=10911                          #broker的监听端⼝号,⼀个broker会占⽤3个端⼝,即10911,10912,10913,同台机器要隔⼏个端⼝
deleteWhen=04                              #⽂件在服务器被删除掉的时间,例 04点的时候被删除。
fileReservedTime=120                        #⽂件保留最长时间默认是48⼩时,也就是2天。
mapedFileSizeCommitLog=1073741824          #commit⽂件⼤⼩限制,超过则会新建⼀个⽂件进⾏保存。commitlog⽤于存放从producer传递过来的数据内容。mapedFileSizeConsumeQueue=300000            #每个⽂件默认存30W条,根据业务情况调整,consumequeue⽤于存放⽂件内容索引和topic以及队列的逻辑关系。brokerRole=ASYNC_MASTER                    #可选择同步双写,或异步复制(SYNC_MASTER  ASYNC_MASTER  SLAVE),如果是从节点就⽤SLAVE
#destroyMapedFileIntervalForcibly=120000
redeleteHangedFileInterval=120000
# 检测物理⽂件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/program/rocketmq/store
#commitLog存储路径
storePathCommitLog=/usr/local/program/rocketmq/store/commitlog
#消费队列存储路径
storePathConsumeQueue=/usr/local/program/rocketmq/store/consumequeue
# 消息索引存储路径
storePathIndex=/usr/local/program/rocketmq/store/index
# checkpoint ⽂件存储路径
storeCheckpoint=/usr/local/program/rocketmq/store/checkpoint
#abort ⽂件存储路径
abortFile=/usr/local/program/rocketmq/store/abort
#限制的消息⼤⼩
maxMessageSize=65536
# flushCommitLogLeastPages=4
# flushConsumeQueueLeastPages=2
# flushCommitLogThoroughInterval=10000
# flushConsumeQueueThoroughInterval=60000
# 刷盘⽅式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageTreadPoolNums=128
#拉消息线程池数量
#pullMessageTreadPoolNums=128
isVIPChannel=false
注意: brokerRole 我从别⼈那copy的配置⽂件,当时这个名称是brokerRote 导致⼀直Slave不起作⽤。
注意⽤替换的时候storepath,我当当时从服务和主服务交叉,store⽤的store2,直接⽤全替换将路径名也替换掉了,导致Slave启动不起来。
修改logs⽂件位置,替换⽂件的存放位置:因斜杠有特殊意义,因此需要反斜杠做不转义声明
>mkdir rocketmq/logs
>cd rocketmq/config && sed -i 's/${user.home}/\/usr\/local\/program\/rocketmq/g' logback_*.xml
修改配置⽂件JAVA_OPT⽂件:
查看rocketmq/bin/runbroker.sh rocketmq/bin/runnameserver.sh可以看出以下的java_opt中默认设置的内存达到8G,在⽣产上可以,但是⽤虚拟机太⼤带不起来。
因此需要全部调整为1G,太⼩有可能启动不起来。
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
修改为:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"
启动:
注意:⾸先要启动所有机器节点的nameServer.然后再启动各节点的broker.
在ab机器启动nameserver:
》nohup sh mqnamesrv &
使⽤java的jps查看就可以看到nameserver的进程。
>jps
在ab机器启动broker,注意a机器⽤broker-a.properties,b机器⽤broker-b.properties:
nohup sh mqbroker -c /usr/local/program/rocketmq/conf/2m-noslave/broker-a.properties  &
有时会遇到有这种写法  nohup sh **** >/dev/null >2&1 & 这种是为了在当前⽬录下不产⽣nohup.out⽂件。
再⽤jps查看是否已经启动进程。如果发现没有broker的进程,则去logs下查看⽇志nohup.sh或者broker⽂件,了解问题。
⾄此,服务端的启动就算OK了。
关闭:》sh mqshutdown broker  (先关闭所有的broker)
》sh mqshutdown namesrv  (然后再关闭所有的namesrv)
清理数据:删除掉 store中的⽂件夹及⽂件即可。
RocketMQ的监控服务平台:
⽬前rocketmq-console使⽤springboot,因此已经不需要安装tomcat,内嵌有tomcat。
下载后,修改rocketmq-console的配置⽂件application.properties。
修改以下⽂件:
isVIPChannel=false
不过,也可以先不做修改,在控制台启动后在OPT上添加也可以。
然后重新打包 >mvn install -DskipTests
将target中的jar包放⼊到linux下,启动activemq和rocketmq的区别
>nohup java -jar /rocketmq-console.jar &
也可添加参数指定启动的port,和nohup启动⽂件⽇志地址  --server.port=12581 > / &
如果浏览器访问被拒绝,有可能是linux端的防⽕墙未关闭导致,关闭防⽕墙后就OK了。
点击菜单Cluster就可以看到集的机器,默认会提供⼀些Topic。
双主双从的搭建注意事项:
1. 从节点的brokerId=n,  n>0从节点的数值⼀定要⼤于0。
2. 从节点的brokername名⼀定要和对应的主节点⼀致。
3. 从节点的brokerRote=SLAVE。
4. 因9876端⼝为其默认端⼝,因此也就意味着⼀台电脑使⽤⼀个NameServer。不能存在主节点和从节点部署在⼀台机⼦上。
如果⽤2个电脑做双主双从,则端⼝号要不⼀样且⾄少隔3位,不然端⼝占⽤⽆法启动,且存储位置不能⼀样。(仅测试⽤),⽣产完全分开。
2m-2s sync 同步双写,
2m-2s async 异步复制。
从节点⼀般会做数据备份,只有在主节点宕机时,从节点未被消费内容会被消费,但是从节点不能⽤于直接⽣产者写操作。即主从不能互换。
当主节点重启后,主节点会去从节点查询offset同步offset。这样就防⽌从消费后主⼜消费。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。