消息隊列 RocketMQ 並發量十萬級


十年河東,十年河西,莫欺少年窮

學無止境,精益求精

前天/昨天,搞了整整兩天安裝RabbitMQ服務端,都是以失敗告終。人不能在一棵樹上吊死,因此,經歷不間斷的堅持后,果斷放棄安裝RabbitMQ服務端,轉向阿里巴巴中間件 RocketMQ 。

話說,無論從哪方面說,阿里的 RocketMQ 都比 RabbitMQ強大,畢竟從命名上我們也能看出端倪:兔子是干不過火箭的。

 

有圖為證:

 

 吞吐量一個是萬,一個是十萬,多了一個量級。

其實網上有很多關於RocketMQ 服務端的安裝配置教程,在此,貼出一下資源供大家使用。

1、windows下RocketMQ下載安裝教程

2、windows下RocketMQ安裝部署

3、RocketMQ 安裝 For Windows10 (完整版)

4、https://blog.csdn.net/qq_32403043/article/details/103582334  踩坑記錄  https://www.cnblogs.com/2YSP/p/11616376.html

5、https://www.cnblogs.com/vipstone/p/11128471.html

其中第三篇是安裝RocketMQ 所需要的的資源及擴展插件。

后續:我的RocketMQ采坑記:

1、javaJDK請使用java1.8,全名為:jdk-8u40-windows-x64.exe,這點很重要,否則你的嘗試很可能會失敗。

2、無論安裝Java還是用來配置環境變量的文件,請放在一個沒有空格的文件夾中,這點很重要

無論你安裝RocketMQ 【rocketmq-all-4.2.0-bin-release】、Java1.8,maven-3.6.3、rocketmq-all-4.2.0-bin-release、rocketmq-externals-master 這些文件不管是用來安裝,還是用來配置環境變量,請在C盤建一個MQ的文件夾,把所有文件均放在MQ文件夾中,上述這些文件僅有Java1.8需要安裝,也需要安裝在MQ文件夾下,【例如:安裝在:C:\MQ\Java目錄下】,其他都是用來配置環境變量的。

3、rocketmq-externals-master 這個文件是非必須的,他的作用是配合Java生成一個Java項目,即:rocketmq-console-ng-1.0.0.jar,這個文件可以通過網上進行下載,端口號默認是8080.

4、據說還需要安裝GIT,因此,不管真假,請安裝GIT。

5、資源包下載:https://download.csdn.net/download/wolongbb/12707884

安裝配置完畢后,執行如下命令:【通過JAVA代理,訪問RocketMQ的服務端】

最終的效果圖如下:

泣血告知,不想采坑,望采納。

@陳卧龍的博客

 轉發:

RocketMQ 可視化環境搭建和基礎代碼使用

RocketMQ 是一款分布式消息中間件,最初是由阿里巴巴消息中間件團隊研發並大規模應用於生產系統,滿足線上海量消息堆積的需求, 在 2016 年底捐贈給 Apache 開源基金會成為孵化項目,經過不到一年時間正式成為了 Apache 頂級項目。
早期阿里曾經基於 ActiveMQ 研發消息系統, 隨着業務消息的規模增大,瓶頸逐漸顯現,后來也考慮過Kafka,但因為在低延遲和高可靠性方面沒有選擇,最后才自主研發了 RocketMQ, 各方面的性能都比目前已有的消息隊列要好,RocketMQ 和 Kafka 在概念和原理上都非常相似,所以也經常被拿來對比;RocketMQ 默認采用長輪詢的拉模式, 單機支持千萬級別的消息堆積,可以非常好的應用在海量消息系統中。
本文分為三部分,如下圖所示:
image.png

1 安裝 RocketMQ—Windows 版本

(1)下載 Windows 安裝包

Windows 版本下載地址:http://rocketmq.apache.org/release_notes/
image.png
下載並解壓 rocketmq 安裝包。

(2)配置系統環境變量

配置系統變量 ROCKETMQ_HOME=“D:\soft\rocketmq-all-4.5.1-bin-release”,如下圖所示:
注意:每個人 rocketmq 存放目錄不一樣,我的在 D:\soft 下,用戶根據自己的環境配置相應的系統變量。
image.png

因為接下來啟動 mqnamesrv.cmd 中使用到了環境變量 %ROCKETMQ_HOME%,所以這里需要配置此系統變量。

(3)啟動 namesrv

進入 rocketmq 的 bin 目錄,執行 start mqnamesrv.cmd ,執行成功如下圖所示:
image.png
注意:啟動之后,不能關閉此窗口。

(4)啟動 broker

還是在 bin 目錄下執行 start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true ,執行成功如下圖所示:
image.png
同樣不要關閉以上運行窗口。
完成以下步驟,說明你的 RocketMQ 已經按照成功了。

2 安裝可視化插件

(1)下載插件

打開連接 https://github.com/apache/rocketmq-externals.git 下載可視化插件 rocketmq-externals,如下圖所示:
image.png
點擊 Download ZIP 進行下載。

我為大家准備了國內百度雲的下載鏈接,方便大家使用。
百度鏈接:https://pan.baidu.com/s/1sMO6W-562IFJF1uUBQFXYg  
提取碼:fuzy

(2)配置插件

下載完成之后,進入 rocketmq-externals\rocketmq-console\src\main\resources\application.properties 進行配置,如下圖所示:
image.png
其中主要的字段說明如下:

  • server.port=8066:此可視化插件的運行端口。
  • rocketmq.config.namesrvAddr=127.0.0.1:9876:rocketmq 的鏈接信息。

(3)編譯插件

進入 rocketmq-externals\rocketmq-console 文件夾,執行 mvn clean package -Dmaven.test.skip=true
 編譯項目。
編譯成功如下圖所示:
image.png
編譯階段有可能出現以下兩個問題,沒有找到 mvn 命令,或編譯超級慢的問題,以下提供解決方案。

問題一:mvn 非可以運行的命令

解決方案:這是因為沒有安裝 Maven 或者沒有配置 Maven 的環境變量導致的,下載 Maven 安裝包,增加環境變量 MAVEN_HOME=maven安裝目錄  ,給 path 中添加 %MAVEN_HOME%\bin ,重新啟動命令行工具(CMD)重新執行命令。

問題二:編譯超慢的問題

解決方案:這是因為使用 Maven 數據源為國外源的問題導致的,只需要配置阿里的 Maven 源即可。
打開 Maven 目錄下的 conf/setting.xml 給 mirrors 節點下添加如下內容:

<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> 

(4)運行插件

編譯成功之后,進入 target 文件夾,執行 java -jar rocketmq-console-ng-1.0.1.jar 啟動程序。
啟動成功之后,在瀏覽器輸入地址 http://127.0.0.1:8066 進行訪問,效果如下圖:
image.png

3 基礎使用

(1)添加引用 jar 包

pom.xml 添加以下代碼:

<!-- https://mvnrepository.com/artifact/com.alibaba.rocketmq/rocketmq-client --> <dependency> <groupId>com.alibaba.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>3.6.2.Final</version> </dependency> 

(2)添加生產者和消費者代碼

public class RocketMQDemo {
    static final String MQ_NAMESRVADDR = "localhost:9876";
    public static void main(String[] args) {
        // 分組名
        String groupName = "myGroup-1";
        // 主題名
        String topicName = "myTopic-1";
        // 標簽名
        String tagName = "myTag-1";
        new Thread(() -> {
            try {
                producer(groupName, topicName, tagName);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (RemotingException e) {
                e.printStackTrace();
            } catch (MQClientException e) {
                e.printStackTrace();
            } catch (MQBrokerException e) {
                e.printStackTrace();
            }
        }).start();
        new Thread(() -> {
            try {
                consumer(groupName, topicName, tagName);
            } catch (MQClientException e) {
                e.printStackTrace();
            }
        }).start();
    }

    /**
     * @Description 生產者
     * @Author wanglei
     * @Param [groupName 分組名, topicName 主題名, tagName 標簽名]
     **/
    public static void producer(String groupName, String topicName, String tagName) throws InterruptedException, RemotingException, MQClientException, MQBrokerException {
        DefaultMQProducer producer = new DefaultMQProducer(groupName);
        producer.setNamesrvAddr(MQ_NAMESRVADDR);
        producer.start();
        String body = "Hello, 老王";
        Message message = new Message(topicName, tagName, body.getBytes());
        producer.send(message);
        producer.shutdown();
    }

    /**
     * @Description 消費者
     * @Author wanglei
     * @Param [groupName 分組名, topicName 主題名, tagName 標簽名]
     **/
    public static void consumer(String groupName, String topicName, String tagName) throws MQClientException {
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(groupName);
        consumer.setNamesrvAddr(MQ_NAMESRVADDR);
        consumer.subscribe(topicName, tagName);
        consumer.registerMessageListener(new MessageListenerConcurrently() {
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(
                    List<MessageExt> msgs, ConsumeConcurrentlyContext context) { for (MessageExt msg : msgs) { System.out.println(new String(msg.getBody())); } return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } }); consumer.start(); } } 

以上程序執行結果如下:

Hello, 老王

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM