阿里雲服務器 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

 下載完成 

查看下載的包

 

二、解壓

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

保存後退出,執行以下命令,讓文件生效

source /etc/profile 

 

3.2  嘗試啓動mqnamesrv

 解壓後在當前目錄(也就是rocketmq的這個文件夾)執行以下命令,測試nameServer

nohup sh bin/mqnamesrv &

服務器反饋如下:

 讓我們輸入下面這個命令來看一下出了什麼問題

 cat nohup.out

  反饋如下:

錯誤日誌在/usr/local/rocketmq/hs_err_pid18305.log,我們使用命令來查看錯誤日誌:

cat hs_err_pid18305.log

錯誤日誌如下: 

英語不好,所以我去谷歌翻譯翻譯了一下:

問題在於內存不足,我們可以將測試環境的內存容量調低一點

 

3.3  調低內存

輸入命令:

vim runbroker.sh

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

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

將   

-server -Xms8g -Xmx8g -Xmn4g

修改爲

-server -Xms256m -Xmx256m -Xmn128m

修改後的文件內容如下

同理修改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

 

四、程序代碼示例

4.1 代碼

代碼複製到本地後要自己alt+enter引入一些包,注:請先引入pom依賴

  4.1.1 pom依賴

        <!-- rocketmq -->
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client</artifactId>
            <version>4.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-common</artifactId>
            <version>4.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.29</version>
        </dependency>

 

  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控制檯輸出信息:

4.2.2 在本地瀏覽器上訪問

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

4.2.3 會出現如下頁面:

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/#/

出現以下界面就妥了

 

 

最後:列舉我遇到的坑

坑1:需要修改rocketmq的brokerIP

使用vim編輯conf目錄下的broker.conf,追加brokerIP1和brokerIP2的定義,馬賽克掉的是我阿里雲服務器的外網ip(它默認使用了私有ip進行連接,所以程序報錯)

 修改了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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章