美文网首页
Apache RocketMQ单机部署

Apache RocketMQ单机部署

作者: 四颗咖啡豆 | 来源:发表于2020-02-09 16:19 被阅读0次

    前言

    这篇文章以4.3.0版本为标准进行讲述在linux下部署RocketMQ单机实例,在此之前需要已配置JAVA环境。

    apache RocketMQ 是阿里巴巴在2016年11月捐赠给了apache基金会并于2017年9月顺利毕业成为apache顶级项目。

    下载程序包

    直接使用一般就下载已经编译好的二进制文件就好了,下载好以后

    > unzip rocketmq-all-4.3.0-bin-release.zip  
    > cd rocketmq-all-4.3.0-bin-release/  
    

    启动name server

    > nohup sh bin/mqnamesrv & 
    

    tail一下日志看看是否已经启动成功

    > tail -f ~/logs/rocketmqlogs/namesrv.log  
    The Name Server boot success... 
    

    启动Broker

    > nohup sh bin/mqbroker -n localhost:9876 & 
    

    tail一下日志看看是否已经启动成功
    <code>> tail -f ~/logs/rocketmqlogs/broker.log
    The broker[%s, 172.30.30.233:10911] boot success...
    </code>

    发送消息和接收消息

    为了简单测试下,在发送/接收消息之前我们需要设置NAMESRV_ADDR环境变量

    &gt; export NAMESRV_ADDR=localhost:9876  
    

    发送消息,测试用例中的方式是使用for循环发送了1000条消息

    &gt; sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer  
    SendResult [sendStatus=SEND_OK, msgId= ...
    

    接收消息

    &gt; sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer   
    SendResult [sendStatus=SEND_OK, msgId= ...
    

    关闭服务

    &gt; sh bin/mqshutdown broker  
    The mqbroker(36695) is running...  
    Send shutdown request to mqbroker(36695) OK
    
    &gt; sh bin/mqshutdown namesrv  
    The mqnamesrv(36664) is running...  
    Send shutdown request to mqnamesrv(36664) OK
    

    到此,我们已经完成了一个简单的部署以及消息的发送和接收,但是这只是在内网下进行的收发消息。

    FAQ

    怎么修改name server和broker的启动内存?

    一开始按照官网的步骤来操作往往会直接启动不起来,提示内存不足,那是因为name server和broker默认的启动JVM内存是4G,而内存在不够的情况下自然就启动失败了。

    这时候需要修改name server和broker的启动内存参数,
    broker的启动内存参数在runbroker.sh下修改,windows下则是runbroker.cmd
    name server的启动内存参数是在runserver.sh下修改,windows下则是runserver.cmd

    需要配置外网访问要怎么配置呢?

    在网上见过很多同学在配置外网访问的时候出现问题,得到的提示大多是
    No Topic Route Info
    这种提示一般都是连接失败了,
    1.broker没有允许自动创建topic,且发送消息对应的topic不存在
    2.broker没有正确的连接到name server
    3.product没有正确的连接到name server

    • 对于情况1,在启动broker的时候添加autoCreateTopicEnable=true参数就好了。
    • 情况2呢,有可能是name server不存在或者是端口冲突,具体可以看日志的报错原因。
    • 情况3的话,一般是端口原因,如果在服务器上本地收发消息都正常但是到了用客户端sdk发消息的时候失败了可以首先查看一下端口本地ping服务器的9876端口和10911端口是否正常,如果正常可以关闭vip通道再次尝试,以JAVA客户端的话就是下面这样
      生产者关闭VIP通道:
    producer.setVipChannelEnabled(false);
    

    消费者关闭VIP通道:

    consumer.setVipChannelEnabled(false);
    

    关闭VIP通道为什么就可以了呢,是因为VIP通道占用了一个端口,10909端口,而服务器的10909端口没有对外开放,所以导致失败了。

    配置文件

    这是我的broker.properties配置文件

    brokerClusterName = DefaultCluster  
    brokerName = broker-a  
    brokerId = 0  
    deleteWhen = 04  
    fileReservedTime = 48  
    brokerRole = ASYNC_MASTER  
    flushDiskType = ASYNC_FLUSH  
    
    brokerIP1=172.17.59.146  
    brokerIP2=172.17.59.146  
    namesrvAddr=172.17.59.146:5776  
    autoCreateTopicEnable=true  
    

    因为我没有使用默认的9876端口,所以也有一个name server的配置文件,namesrv.conf

    listenPort=5776
    

    也可以直接下载我的broker.propertiesnamesrv.conf

    使用自己的配置文件启动name server和broker的时候都是添加一个指定文件的参数-c 文件路径

    到目前为止,一个简单的apache RocketMQ单机实例已经部署好了,开始愉快的消息队列旅程吧!

    始发于 四颗咖啡豆 发布!
    关注公众号->[四颗咖啡豆] 获取最新内容

    相关文章

      网友评论

          本文标题:Apache RocketMQ单机部署

          本文链接:https://www.haomeiwen.com/subject/vlnaxhtx.html