RocketMQ - 阿里云部署、及外网访问的那些个问题

mq的应用及普及,已经深入到了每一个互联网公司。至少掌握一门mq相关的中间件技术,是每一个合格的程序员的标配。

RocketMQ是阿里开源的一个消息中间件,之前也有所了解和使用,但是从来没在自己的云服务器上真正部署和实践。(因为公司已经有封装好的mq客户端)。故,这次从头部署、实践,一步步深入理解这个由阿里中间件团队贡献给Apache的消息中间件。

环境

  1. 阿里云服务器(ECS),2G内存,1核。配置较低,入门级。
  2. 安全组
    开启端口9876和10911:

安装

  1. 下载
    wget http://mirrors.hust.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-source-release.zip
  2. 安装
    unzip rocketmq-all-4.2.0-source-release.zip
    
    mv rocketmq-all-4.2.0 /usr/local/rocketmq
    cd /usr/local/rocketmq
    
    mvn -Prelease-all -DskipTests clean install -U
    cd distribution/target/apache-rocketmq

    参考官网:http://rocketmq.apache.org/docs/quick-start/

    注意:在安装过程中,一定要注意官网上指明的其他软件的版本,比如:JDK一定要1.8以上,maven一定要3.2以上,我就在maven版本上挖了坑。。。

启动

  1. 启动nameserver
    nohup sh bin/mqnamesrv &
    
    tail -f ~/logs/rocketmqlogs/namesrv.log
    The Name Server boot success...
  2. 启动broker
    nohup sh bin/mqbroker -n localhost:9876 &
    
    tail -f ~/logs/rocketmqlogs/broker.log 
    The broker[aliyun.jack, 172.16.74.201:10911] boot success. serializeType=JSON and name server is localhost:9876

问题汇总

  1. 内网ip
    (1)描述
    172.16.74.201是阿里云的内网ip,这样启动的话,外网是访问不到的,我电脑去访问的话,会报如下错误:
    Exception in thread "main"
    org.apache.rocketmq.remoting.exception.RemotingConnectException:
    connect to <172.16.74.201:10911> failed
    (2)解决
    修改conf下的配置文件broker.conf,并修改启动命令
    vim conf/broker.conf

    马赛克掉的ip就是阿里云的外网IP

    修改后执行启动命令:
    nohup sh bin/mqbroker -c conf/broker.conf &
  2. producer启动后,报异常
    (1)描述
    Exception in thread "main" org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <47.*.*.134:10909> failed
    (2)解决
    关闭vip通道:producer.setVipChannelEnabled(false);
     
  3. consumer启动后不消费
    (1)描述
    等了很久都没动静
    (2)解决
    关闭vip通道:producer.setVipChannelEnabled(false);
     
  4. No route info of this topic
    (1)描述
    创建不了topic
    (2)解决
    检查一下配置:autoCreateTopicEnable=true
    可以通过命令查看,如下:
    sh bin/mqbroker -m >broker.p
    
    vim broker.p
    扫描二维码关注公众号,回复: 1428671 查看本文章

演示效果

参考官网的例子:http://rocketmq.apache.org/docs/order-example/

  1. producer
  2. consumer

     

重复消费的现象(生产10条,消费13条),这是因为官方示例中,有的消息返回状态码:

ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT。

修改所有消息返回成功状态:ConsumeOrderlyStatus.SUCCESS

这个时候,就不会出现重复消息的情况。如下图:

生产10条,消费10条。

本文由 小王穷遊 创作。 可自由转载、引用,但需署名作者且注明文章出处。

个人博客:http://jackwang.site/

猜你喜欢

转载自my.oschina.net/xiaowangqiongyou/blog/1823400