Mac&Ubuntu安装rocketMQ

记录一下安装rocketMQ遇到的坑,其实如果正常的机器,正常的电脑配置安装官网一点可以安装成功。关键是大家情况不同,就遇到了问题。

正常安装流程

前提条件

Java 1.8+
maven

官网步骤

wget https://archive.apache.org/dist/rocketmq/4.7.0/rocketmq-all-4.7.0-source-release.zip
unzip rocketmq-all-4.7.0-source-release.zip
cd rocketmq-all-4.7.0/
mvn -Prelease-all -DskipTests clean install -U
cd distribution/target/rocketmq-4.7.0/rocketmq-4.7.0

就是下载zip,解压,maven安装

Start Name Server

nohup sh bin/mqnamesrv &
tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...

后台启动name server,然后确认是否正常启动,可以通过tail查看日志

Start Broker

nohup sh bin/mqbroker -n localhost:9876 &
tail -f ~/logs/rocketmqlogs/broker.log
The broker[%s, 172.30.30.233:10911] boot success...

启动broker,正常情况可以正常启动,但是我就遇到了死活启动不了,阿里云的学生机器配置属实不给力,并且只要一启动,服务器敲命令都卡,把内存耗完了。

遇到的坑

阿里云学生云主机安装

买了一年的阿里云学生云主机,想安装个rocketMQ试试,结果遇到的第一个坑是git clone不行,报404,也就是找不到github,然后ping github.com也不行,然后网上找解法,在https://site.ip138.com/www.github.com/
查找GitHub的IP地址,然后修改/etc/hosts下的文件,添加一行,手动解析域名。

140.82.112.4 github.com

第二个坑就是启动name server报错“ERROR: Please set the JAVA_HOME variable in your environment, We need java(x64)! !!”,原因是Java是通过apt-get安装的,没有设置JAVA_HOME,所以要先查询JAVA_HOME是什么?然后设置即可。如果你的是bash就在.bashrc如果是zsh就在.zshrc增加
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64。然后使之生效
source .zshrc 或者source .bashrc。
第三个坑就是上面说的无法启动broker,报错“rockermq broker killed”,原因就是学生云主机配置太低,内存不够,网上的解法是修改rockerMQ的bin下的
mqnamesrv.sh和mqbroker.sh,找到这两个文件的JAVA_OPT这一行修改一下。mqnamesrv.sh修改成
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx256m -Xmn256m -XX:MetaspaceSize=1 28m -XX:MaxMetaspaceSize=320m"
runbroker.sh修改成JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m",如果还是启动不了就再把参数设置小一点。

MAC下安装遇到的坑

我Mac下的Java是下载包安装的,导致没有JAVA_HOME,所以又出现了上面的报错,解决方法一样,只是路径变了。export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home,还有一个问题就是我的maven是通过brew进行安装的,可能是当时没有设置JAVA_HOME导致安装了Java13,这个把我坑惨了,在进行mvn -Prelease-all -DskipTests clean install -U这一步的时候,一直报Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5.1:compile (default-compile) on project rocketmq-logging: Compilation failure: Compilation failure: 不再支持源选项 6。请使用 7 或更高版本。原因就是Java版本太高了。解决办法就是设置JAVA_HOME为Java1.8的,然后maven默认就是变成Java1.8了,再进行安装就行了。
还有一个问题就是我使用了oh-my-zsh,这个设置的JAVA_HOME只对当前用户有效,当我sudo su进入超级用户就没有JAVA_HOME了,这个坑我好久。

云服务器远程连接问题

报错"INFO RocketmqRemoting - closeChannel: close the connection to remote address[] result: true"这个问题差不多坑了我一天,各种谷歌百度。在远程启动后,如果想让本地可以访问,需要对其进行设置,创建配置文件broker.conf

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

其中xxx.xxx.xxx.xxx设置为云服务器的公网IP,然后启动broker的时候加上配置文件sh mqbroker -c broker.conf,然后这个时候还不算完,还是没法访问连不上,各种修改配置,就是不行,最后试了一下producer.setVipChannelEnabled(false);consumer.setVipChannelEnabled(false);可以了。还有一点就是要配置阿里云的安全组,开放9876和10911端口。最后上个测试通过的例子结束。

生产者

package com.imooc.luckymoney.rocketMQ.producer;

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.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;
import org.apache.rocketmq.remoting.exception.RemotingException;
import org.apache.rocketmq.remoting.protocol.RocketMQSerializable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;

/**
 * @Author: xiangyang
 * @Description: producer端发送同步消息
 * @Date: 2020/6/5
 */
public class SyncProducer {

    private static String mqUrl = "你的公网IP,也就是上面设置的xxx.xxx.xxx.xxx";

    private static String mqPort = "9876";


    public static void main(String[] args) throws MQClientException, UnsupportedEncodingException, RemotingException, InterruptedException, MQBrokerException {
        DefaultMQProducer producer = new DefaultMQProducer("syncMQ");
        producer.setNamesrvAddr(mqUrl + ":" + mqPort);
        producer.setVipChannelEnabled(false);
        producer.start();

        for(int i=0; i<20; i++){
            Message msg = new Message("TopicTest",
                    "TagA",
                    ("Hello RocketMQ" + i).getBytes(RemotingHelper.DEFAULT_CHARSET));
            SendResult sendResult = producer.send(msg);
            System.out.printf("%s%n", sendResult);
        }
        producer.shutdown();
    }
}

消费者

package com.imooc.luckymoney.rocketMQ.consumer;

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.client.exception.MQClientException;
import org.apache.rocketmq.common.message.MessageExt;

import java.util.List;

/**
 * @Author: xiangyang
 * @Description: 消费消息
 * @Date: 2020/6/5
 */
public class Consumer {

    private static String mqUrl = "你的公网IP,也就是上面设置的xxx.xxx.xxx.xxx";

    private static String mqPort = "9876";

    public static void main(String[] args) throws MQClientException {
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumerMQ");
        consumer.setNamesrvAddr(mqUrl + ":" + mqPort);
        consumer.setVipChannelEnabled(false);
        consumer.subscribe("TopicTest", "*");

        consumer.registerMessageListener(new MessageListenerConcurrently() {
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
                System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs);
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });
        consumer.start();
        System.out.println("Consumer Started.%n");
    }
}

此外还可以启动rocketmq-console进行可视化。官网都有,不在此赘述。安装与使用

参考资料

RocketMQ安装和启动管理
Quick Start
阿里云安装RocketMQ
Apache RocketMQ单机部署

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343