一. 粗略认识RocketMQ
RocketMQ主要解决当访问服务数量超过系统性能瓶颈的问题,大概的解决思路就是先把信息收集起来,然后按照自己的速度一步步处理,而系统的访问者在把信息发送给RocketMQ之后,可以不用等返回结果,就可以先去忙自己的另外的工作.
RocketMQ的特点:异步化,基本一致性,流量削峰,降低偶尔.
它的运行情况大概是这么一个场景:
有很多经纪人(broker),其中能力强的被称作大师级经纪人(Master broker),能力弱一点的被称作经纪人专员(slave broker),经纪人专员(slave broker)依附于大师级经纪人(Master broker),他们组合在一起被称作是经纪人团队(broker).
经纪人团队(broker)如果需要营业那么需要现在一个叫做NameServer的地方进行登记注册,并且每隔一段时间发送一个请求过去证明自己还可以继续工作.这个经纪人团队由大师级经纪人(Master broker)负责接收消费者的信息,当大师级经纪人(Master broker)出现状况的时候,这个团队中的某个经纪人专员(slave broker)会升级为大师级经纪人.经纪人专员(slave broker)主动从大师级经纪人那里获得信息.并由大师级经纪人(Master broker)分配得到消息后由谁去处理.
消费者如果需要寻找服务,他们会通过NameServer找到经纪人团队(broker),消费者把自己的要求告诉经纪人团队(broker),然后消费者就不用管了,经纪人团队(broker)在方便的时候就会把消费者要做的下一步事情完成.
在这个场景中消费者(服务调用者)不会受到阻塞,因为它只是会把任务发送给了broker,这样就可以解决消息量高并发的问题.
二.前期准备
2.1 下载RocketMQ
RocketMQ
2.2 在windows上安装RocketMQ
2.2.1 设置环境变量
添加名为ROCKETMQ_HOME的环境变量,值为rocketMQ的安装目录,安装目录最好不要有中文或者特殊字符.
添加名为NAMESRV_ADDR的环境变量,用来指向nameServer服务的地址,本地测试一般使用本地机器地址,例如:localhost:61011 选一个没有被占用的端口.
2.2.2 修改cmd文件
rocketMQ默认是用的JDK版本是1.8,如果低于这个版本将无法运行,如果高于这个版本需要修改两个cmd文件.
在安装目录的bin文件夹下找到:runserver.cmd 将代码改为下面的内容,在这之前可以先备份.
@echo off
rem Licensed to the Apache Software Foundation (ASF) under one or more
rem contributor license agreements. See the NOTICE file distributed with
rem this work for additional information regarding copyright ownership.
rem The ASF licenses this file to You under the Apache License, Version 2.0
rem (the "License"); you may not use this file except in compliance with
rem the License. You may obtain a copy of the License at
rem
rem http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.
if not exist "%JAVA_HOME%\bin\java.exe" echo Please set the JAVA_HOME variable in your environment, We need java(x64)! & EXIT /B 1
set "JAVA=%JAVA_HOME%\bin\java.exe"
setlocal
set BASE_DIR=%~dp0
set BASE_DIR=%BASE_DIR:~0,-1%
for %%d in (%BASE_DIR%) do set BASE_DIR=%%~dpd
set CLASSPATH=.;%BASE_DIR%conf;%BASE_DIR%lib\*;%CLASSPATH%
set "JAVA_OPT=%JAVA_OPT% -server -Xms4g -Xmx4g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
set "JAVA_OPT=%JAVA_OPT% -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
set "JAVA_OPT=%JAVA_OPT% -verbose:gc -Xloggc:"%USERPROFILE%\rmq_srv_gc.log" -XX:+PrintGCDetails"
set "JAVA_OPT=%JAVA_OPT% -XX:-OmitStackTraceInFastThrow"
set "JAVA_OPT=%JAVA_OPT% -XX:-UseLargePages"
set "JAVA_OPT=%JAVA_OPT% %JAVA_OPT_EXT% -cp "%CLASSPATH%""
echo %*
"%JAVA%" %JAVA_OPT% %*
另外在安装目录的bin文件夹,找到 runbroker.cmd 同样可以先备份,将文件内容改为下面代码:
@echo off
rem Licensed to the Apache Software Foundation (ASF) under one or more
rem contributor license agreements. See the NOTICE file distributed with
rem this work for additional information regarding copyright ownership.
rem The ASF licenses this file to You under the Apache License, Version 2.0
rem (the "License"); you may not use this file except in compliance with
rem the License. You may obtain a copy of the License at
rem
rem http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.
if not exist "%JAVA_HOME%\bin\java.exe" echo Please set the JAVA_HOME variable in your environment, We need java(x64)! & EXIT /B 1
set "JAVA=%JAVA_HOME%\bin\java.exe"
setlocal
set BASE_DIR=%~dp0
set BASE_DIR=%BASE_DIR:~0,-1%
for %%d in (%BASE_DIR%) do set BASE_DIR=%%~dpd
set CLASSPATH=.;%BASE_DIR%conf;%BASE_DIR%lib\*;%CLASSPATH%
rem ===========================================================================================
rem JVM Configuration
rem ===========================================================================================
set "JAVA_OPT=%JAVA_OPT% -server -Xms2g -Xmx2g"
set "JAVA_OPT=%JAVA_OPT% -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8"
set "JAVA_OPT=%JAVA_OPT% -verbose:gc -Xlog:gc*:file=%USERPROFILE%/mq_gc.log:time,tags:filecount=5,filesize=30M"
set "JAVA_OPT=%JAVA_OPT% -XX:-OmitStackTraceInFastThrow"
set "JAVA_OPT=%JAVA_OPT% -XX:+AlwaysPreTouch"
set "JAVA_OPT=%JAVA_OPT% -XX:MaxDirectMemorySize=15g"
set "JAVA_OPT=%JAVA_OPT% -XX:-UseLargePages
set "JAVA_OPT=%JAVA_OPT% -Drocketmq.client.logUseSlf4j=true"
set "JAVA_OPT=%JAVA_OPT% %JAVA_OPT_EXT% -cp %CLASSPATH%"
"%JAVA%" %JAVA_OPT% %*
三.运行RocketMQ
用cmd命令进入dos
进入RocketMQ安装目录下的bin文件夹,运行下面的命令启动NameServer
start mqnamesrv.cmd
运行成功之后,在同样的目录下运行下面的命令启动Broker
start mqbroker.cmd autoCreateTopicEnable=true