阿里云服务器 Centos7 安装RocketMQ,并在本地使用springboot连接测试使用,并安装rocket-console可视化管理

写在前面:本人是Linux系统小白,虽然有买阿里云的服务器,但是在使用操作上面还是一知半解,一脸懵逼。由于本人服务器上已经部署了项目所需的其余东西,所以不敢轻举妄动(晚上就因为一些骚操作差点被队友拿刀砍了),所以这次安装测试RocketMQ,我先登录阿里云控制台为服务器创建了一份快照。就算出事也有补救机会。以此篇博客记录我的安装过程以及过程中遇到的坑,最后给出我的示例代码。亲测可用。

参考:https://www.jianshu.com/p/b570884e0dd6

目录

一、下载

二、解压

三、运行

3.1  修改PATH路径

3.2  尝试启动mqnamesrv

3.3  调低内存

3.4  需要使用到的命令

3.4.1 开启服务命令

3.4.2 查看日志命令

3.4.3 关闭服务命令

3.4.4 手动在命令行创建topic命令(bin目录下)

3.4.5 查看当前所有的topic

3.4.6 查看当前开启的服务命令

四、程序代码示例

4.1 代码

  4.1.1 pom依赖

  4.1.2 application.properties

  4.1.3 RocketController

  4.1.4 ConsumerService

4.1.5 ProducerService

4.2 运行 

五、安装rocketmq的可视化管理工具

5.1下载

5.2 修改配置文件

5.3 运行

最后:列举我遇到的坑

坑1:需要修改rocketmq的brokerIP

坑2:这个纯属自己蠢,没有创建阿里云服务器的安全组规则

坑3:没有办法自己创建topic

坑4:给我报错nullPointer,结果屁事儿没有

坑5:关于防火墙,以下是可能会用到的命令

1.卸载firewalld

2.安装iptables

3.查看防火墙状态

4.停止防火墙

5.启动防火墙

6.设为开机不启动

7.设为开机启动

8.如果要开启防火墙,则需要开放特定端口(以下内容未经过本人测试)

9.其它相关命令


 

一、下载

1. 使用如下语句下载rocketmq的包

wget https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip

 下载完成 

阿里云服务器 Centos7 安装RocketMQ,并在本地使用springboot连接测试使用,并安装rocket-console可视化管理_第1张图片

查看下载的包

 

二、解压

1. 在/usr/local下新建一个程序文件夹用来放rocketmq

mkdir -p /usr/local/rocketmq

  查看新建的文件夹,ok建好了

2. 将刚刚下载的rocket包解压到我们新建的程序文件夹里面

unzip rocketmq-all-4.2.0-bin-release.zip -d /usr/local/rocketmq

如果提示没有unzip的话,使用yum安装一下

 yum install unzip

安装之后,再次执行解压命令(注意:需要到rocket包的那个目录下执行命令),解压后到路径下看一眼嘻嘻(小白的卑微)

 

三、运行

3.1  修改PATH路径

命令

vim /etc/profile

在末尾追加

#set rocketmq environment
export ROCKETMQ_HOME=/usr/local/rocketmq
#set path
export PATH=$ROCKETMQ_HOME/bin:$PATH

export NAMESRV_ADDR=你的阿里云服务器公网IP:9876

阿里云服务器 Centos7 安装RocketMQ,并在本地使用springboot连接测试使用,并安装rocket-console可视化管理_第2张图片

保存后退出,执行以下命令,让文件生效

source /etc/profile 

 

3.2  尝试启动mqnamesrv

 解压后在当前目录(也就是rocketmq的这个文件夹)执行以下命令,测试nameServer

nohup sh bin/mqnamesrv &

服务器反馈如下:

 让我们输入下面这个命令来看一下出了什么问题

 cat nohup.out

  反馈如下:

阿里云服务器 Centos7 安装RocketMQ,并在本地使用springboot连接测试使用,并安装rocket-console可视化管理_第3张图片

错误日志在/usr/local/rocketmq/hs_err_pid18305.log,我们使用命令来查看错误日志:

cat hs_err_pid18305.log

错误日志如下: 

阿里云服务器 Centos7 安装RocketMQ,并在本地使用springboot连接测试使用,并安装rocket-console可视化管理_第4张图片

英语不好,所以我去谷歌翻译翻译了一下:

阿里云服务器 Centos7 安装RocketMQ,并在本地使用springboot连接测试使用,并安装rocket-console可视化管理_第5张图片问题在于内存不足,我们可以将测试环境的内存容量调低一点

 

3.3  调低内存

输入命令:

vim runbroker.sh

可以看到如下信息,白圈标注的地方就是要修改的地方 

阿里云服务器 Centos7 安装RocketMQ,并在本地使用springboot连接测试使用,并安装rocket-console可视化管理_第6张图片

修改如下:(注:要修改文件需要按一下“ i ”,修改完成后按下“ Esc ”,保存并退出是“ :wq! ”,强制退出是“ :q! ”)

将   

-server -Xms8g -Xmx8g -Xmn4g

修改为

-server -Xms256m -Xmx256m -Xmn128m

修改后的文件内容如下

阿里云服务器 Centos7 安装RocketMQ,并在本地使用springboot连接测试使用,并安装rocket-console可视化管理_第7张图片

同理修改runserver.sh(我还修改了tools.sh,也是大的地方就改小)

修改后重新启动,以下列出可能会用到的命令

 

3.4  需要使用到的命令

3.4.1 开启服务命令

//启动nameServer
nohup sh mqbroker -n localhost:9876 &

/***启动broker**/
//可以先尝试这个启动命令能否自己创建topic
nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true &

//如果不行,使用3.4.4的命令在Centos7手动创建topic后,使用这个命令启动broker
nohup sh mqbroker -n localhost:9876 -c ../conf/broker.conf &

3.4.2 查看日志命令

tail -f ~/logs/rocketmqlogs/namesrv.log

tail -f ~/logs/rocketmqlogs/broker.log

3.4.3 关闭服务命令

sh mqshutdown namesrv

sh mqshutdown broker

3.4.4 手动在命令行创建topic命令(bin目录下)

./mqadmin updateTopic -n localhost:9876 -b localhost:10911 -t testTopic

3.4.5 查看当前所有的topic

./mqadmin topicList

3.4.6 查看当前开启的服务命令

jps

阿里云服务器 Centos7 安装RocketMQ,并在本地使用springboot连接测试使用,并安装rocket-console可视化管理_第8张图片

 

四、程序代码示例

4.1 代码

代码复制到本地后要自己alt+enter引入一些包,注:请先引入pom依赖

  4.1.1 pom依赖

        
        
            org.apache.rocketmq
            rocketmq-client
            4.3.0
        
        
            org.apache.rocketmq
            rocketmq-common
            4.3.0
        
        
            com.alibaba
            fastjson
            1.2.29
        

 

  4.1.2 application.properties

#rocketmq
apache.rocketmq.consumer.PushConsumer=PushConsumer
apache.rocketmq.producer.producerGroup=Producer
apache.rocketmq.namesrvAddr=你的阿里云公网IP:9876

 

  4.1.3 RocketController

@RestController
@RequestMapping("/rocket")
public class RocketController {
    @Autowired
    private ProducerService producer;

    @RequestMapping("/push")
    public String pushMsg(String msg) {
        return producer.send("testTopic", "push", msg);
    }
}

 

  4.1.4 ConsumerService

@Component
public class ConsumerService {
    @Value("${apache.rocketmq.consumer.PushConsumer}")
    private String consumerGroup;
    @Value("${apache.rocketmq.namesrvAddr}")
    private String namesrvAddr;

    @PostConstruct
    public void defaultMQPushConsumer() {
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroup);
        consumer.setNamesrvAddr(namesrvAddr);
        try {
            consumer.subscribe("testTopic", "push");

            // 如果是第一次启动,从队列头部开始消费
            // 如果不是第一次启动,从上次消费的位置继续消费
            consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);

            consumer.registerMessageListener((MessageListenerConcurrently) (list, context) -> {
                try {
                    for (MessageExt messageExt : list) {
                        String messageBody = new String(messageExt.getBody(), RemotingHelper.DEFAULT_CHARSET);
                        System.out.println("[Consumer] msgID(" + messageExt.getMsgId() + ") msgBody : " + messageBody);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    return ConsumeConcurrentlyStatus.RECONSUME_LATER;
                }
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            });
            consumer.start();
            System.out.println("[Consumer 已启动]");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

4.1.5 ProducerService

@Service
//@Component
public class ProducerService {
    @Value("${apache.rocketmq.producer.producerGroup}")
    private String producerGroup;

    @Value("${apache.rocketmq.namesrvAddr}")
    private String namesrvAddr;

    private DefaultMQProducer producer;

    @PostConstruct
    public void initProducer() {
        producer = new DefaultMQProducer(producerGroup);
        producer.setNamesrvAddr(namesrvAddr);
        producer.setRetryTimesWhenSendFailed(3);
        try {
            producer.start();
            System.out.println("[Producer 已启动]");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String send(String topic, String tags, String msg) {
        SendResult result = null;
        try {
            Message message = new Message(topic, tags, msg.getBytes(RemotingHelper.DEFAULT_CHARSET));
            result = producer.send(message,10000);
            System.out.println("[Producer] msgID(" + result.getMsgId() + ") " + result.getSendStatus());
        } catch (Exception e) {
            e.printStackTrace();
        }
//        System.out.println(result.toString());
        return "{\"MsgId\":\"" + result.getMsgId() + "\"}";
    }

    @PreDestroy
    public void shutDownProducer() {
        if (producer != null) {
            producer.shutdown();
        }
    }

 

4.2 运行 

4.2.1 运行程序,会在idea控制台输出信息:

阿里云服务器 Centos7 安装RocketMQ,并在本地使用springboot连接测试使用,并安装rocket-console可视化管理_第9张图片

4.2.2 在本地浏览器上访问

http://localhost:8080/rocket/push?msg=hello

4.2.3 会出现如下页面:

阿里云服务器 Centos7 安装RocketMQ,并在本地使用springboot连接测试使用,并安装rocket-console可视化管理_第10张图片

4.2.4 同时,idea控制台会输出

 

五、安装rocketmq的可视化管理工具

5.1下载

1. 进入到rocketmq文件夹

cd /usr/local/rocketmq

2. 克隆

git clone https://github.com/apache/rocketmq-externals

如果你没有安装git,请使用以下命令安装git:

yum install git

5.2 修改配置文件

进入到下面路径

cd /usr/local/rocketmq/rocketmq-externals/rocketmq-console/src/main/resources

使用vim修改application.properties

vim application.properties

修改如下配置

server.port=8082 // 服务端口号

rocketmq.config.namesrvAddr=阿里云服务器的私有IP:9876 // 配置服务地址

rocketmq.config.dataPath=/tmp/rocketmq-console/data // mq数据路径,可以自己修改

使用maven打包

cd /usr/local/rocketmq/rocketmq-externals/rocketmq-console

mvn clean package -Dmaven.test.skip=true

5.3 运行

(需要一直在后台运行,其实也可能不需要)

nohup java -jar rocketmq-console-ng-1.0.1.jar --server.port=8082 --rocketmq.config.namesrvAddr=阿里云私有IP:9876 &

在自己本机的电脑浏览器输入

http:/阿里云外网IP:8082/#/

出现以下界面就妥了阿里云服务器 Centos7 安装RocketMQ,并在本地使用springboot连接测试使用,并安装rocket-console可视化管理_第11张图片

 

 

最后:列举我遇到的坑

坑1:需要修改rocketmq的brokerIP

使用vim编辑conf目录下的broker.conf,追加brokerIP1和brokerIP2的定义,马赛克掉的是我阿里云服务器的外网ip(它默认使用了私有ip进行连接,所以程序报错)

阿里云服务器 Centos7 安装RocketMQ,并在本地使用springboot连接测试使用,并安装rocket-console可视化管理_第12张图片

 修改了brokerIP后,需要重启rocketmq,注意,在启动broker的时候,需要使用如下命令,使用配置文件中的内容进行启动

nohup sh mqbroker -n localhost:9876 -c ../conf/broker.conf &

 

坑2:这个纯属自己蠢,没有创建阿里云服务器的安全组规则

百读文章说创建两个,一个9876是肯定的,另一个是10911,然而我配置了还是不行,注意!!!请看你的报错信息,报错信息会给出你自己真实需要的端口,比如,我的就是10909我也不知道为什么

 

坑3:没有办法自己创建topic

这个topic我的不知道为什么就是不能自己创建,加了autoCreateTopicEnable=true也不行,非得手动创建,我去tm的小火箭

 

坑4:给我报错nullPointer,结果屁事儿没有

只要服务器的rocketmq运行起来了,本地项目端口号对上了,这报错就消失了。嗯。

 

坑5:关于防火墙,以下是可能会用到的命令

1.卸载firewalld

yum remove firewalld

2.安装iptables

yum install iptables-services

3.查看防火墙状态

service iptables status

4.停止防火墙

service iptables stop

5.启动防火墙

service iptables start

6.设为开机不启动

systemctl disable iptables.service

7.设为开机启动

systemctl enable iptables.service

8.如果要开启防火墙,则需要开放特定端口(以下内容未经过本人测试)

例:开放3306端口

编辑:vi /etc/sysconfig/iptables

添加配置

-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

重启防火墙使配置生效

systemctl restart iptables.service

9.其它相关命令

查看防火墙规则

iptables -L

清空防火墙规则

iptables -F

保存使操作生效

/etc/sysconfig/iptables save

停止防火墙

/etc/sysconfig/iptables stop

你可能感兴趣的:(RocketMQ)