springboot筆記24整合RocketMQ4.x


5、RocketMQ4.x消息隊列介紹
    簡介:阿里開源消息隊列 RocketMQ4.x介紹和新概念講解

    1、Apache RocketMQ作為阿里開源的一款高性能、高吞吐量的分布式消息中間件
    2、特點
        1)在高壓下1毫秒內響應延遲超過99.6%。
        2)適合金融類業務,高可用性跟蹤和審計功能。
        3)支持發布訂閱模型,和點對點
        4)支持拉pull和推push兩種消息模式
        5)單一隊列百萬消息
        6)支持單master節點,多master節點,多master多slave節點
        ...
    3、概念
        Producer:消息生產者
        Producer Group:消息生產者組,發送同類消息的一個消息生產組

        Consumer:消費者
        Consumer Group:消費同個消息的多個實例

        Tag:標簽,子主題(二級分類),用於區分同一個主題下的不同業務的消息

        Topic:主題
        Message:消息
        Broker:MQ程序,接收生產的消息,提供給消費者消費的程序
        Name Server:給生產和消費者提供路由信息,提供輕量級的服務發現和路由        

    3、官網地址:http://rocketmq.apache.org/

    學習資源:
        1)http://jm.taobao.org/2017/01/12/rocketmq-quick-start-in-10-minutes/    
        2)https://www.jianshu.com/p/453c6e7ff81c










6、RocketMQ4.x本地快速部署
    簡介:RocketMQ4.x本地快速部署

    1、安裝前提條件(推薦)
        64bit OS, Linux/Unix/Mac
        64bit JDK 1.8+;

    2、快速開始 http://rocketmq.apache.org/docs/quick-start/
       下載安裝包:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip

       路徑:/Users/jack/Desktop/person/springboot/資料/第13章/第5課/rocketmq-all-4.2.0-bin-release/bin
    
    3、解壓壓縮包 
        1)進入bin目錄,啟動namesrv
             nohup sh mqnamesrv & 
        
        2) 查看日志 tail -f nohup.out

Java運行時環境的內存不足,無法繼續,本機內存分配(mmap)未能映射8589934592字節,用於提交保留內存
解決辦法,找到runserver.sh和runbroker.sh,編輯
JAVA_OPT=”${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m”
改成如上就可以了


        結尾:The Name Server boot success. serializeType=JSON 表示啟動成功
        
        3、啟動broker   
            nohup sh mqbroker -n 127.0.0.1:9876 &

        4)、關閉nameserver broker執行的命令
            sh mqshutdown namesrv
            sh mqshutdown broker







7、RoekerMQ4.x可視化控制台講解
    簡介:RoekerMQ4.x可視化控制台講解

        1、下載 https://github.com/apache/rocketmq-externals
        2、編譯打包  mvn clean package -Dmaven.test.skip=true
        3、target目錄 通過java -jar的方式運行
        
        4、無法連接獲取broker信息
            1)修改配置文件,名稱路由地址為 namesrvAddr,例如我本機為
            2)src/main/resources/application.properties
                rocketmq.config.namesrvAddr=192.168.0.101:9876
        
        5、默認端口 localhost:8080
        
        6、注意:
            在阿里雲,騰訊雲或者虛擬機,記得檢查端口號和防火牆是否啟動









8、Springboot2.x整合RocketMQ4.x實戰上集
    簡介:Springboot2.x整合RocketMQ4.x實戰,加入相關依賴,開發生產者代碼
    
    啟動nameser和broker

    1、加入相關依賴
        <dependency>  
            <groupId>org.apache.rocketmq</groupId>  
            <artifactId>rocketmq-client</artifactId>  
            <version>${rocketmq.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.apache.rocketmq</groupId>  
            <artifactId>rocketmq-common</artifactId>  
            <version>${rocketmq.version}</version>  
        </dependency>  


    2、application.properties加入配置文件        
        # 消費者的組名
        apache.rocketmq.consumer.PushConsumer=orderConsumer
        # 生產者的組名
        apache.rocketmq.producer.producerGroup=Producer
        # NameServer地址
        apache.rocketmq.namesrvAddr=127.0.0.1:9876

    3、開發MsgProducer
         /**
         * 生產者的組名
         */
        @Value("${apache.rocketmq.producer.producerGroup}")
        private String producerGroup;

        /**
         * NameServer 地址
         */
        @Value("${apache.rocketmq.namesrvAddr}")
        private String namesrvAddr;

        private  DefaultMQProducer producer ;

            
        public DefaultMQProducer getProducer(){
            return this.producer;
        }
        
        @PostConstruct
        public void defaultMQProducer() {
            //生產者的組名
            producer = new DefaultMQProducer(producerGroup);
            //指定NameServer地址,多個地址以 ; 隔開
            //如 producer.setNamesrvAddr("192.168.100.141:9876;192.168.100.142:9876;192.168.100.149:9876"); 
            producer.setNamesrvAddr(namesrvAddr);
            producer.setVipChannelEnabled(false);
            
            try {
                /**
                 * Producer對象在使用之前必須要調用start初始化,只能初始化一次
                 */
                producer.start();

            } catch (Exception e) {
                e.printStackTrace();
            } 
            
            // producer.shutdown();  一般在應用上下文,關閉的時候進行關閉,用上下文監聽器

        }





9、Springboot2.x整合RocketMQ4.x實戰下集
    簡介:Springboot2.x整合RocketMQ4.x實戰,開發消費者代碼,常見問題處理

    1、創建消費者


    問題:
        1、Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <172.17.42.1:10911> failed (生產者跟broker不在同一台服務器會報這個)

        2、com.alibaba.rocketmq.client.exception.MQClientException: Send [1] times, still failed, cost [1647]ms, Topic: TopicTest1, BrokersSent: [broker-a, null, null]

        3、org.apache.rocketmq.client.exception.MQClientException: Send [3] times, still failed, cost [497]ms, Topic: TopicTest, BrokersSent: [chenyaowudeMacBook-Air.local,     chenyaowudeMacBook-Air.local, chenyaowudeMacBook-Air.local]
        解決:多網卡問題處理
        1、設置producer:  producer.setVipChannelEnabled(false);
        2、編輯ROCKETMQ 配置文件:broker.conf(下列ip為自己的ip)
            namesrvAddr = 192.168.0.101:9876
            brokerIP1 = 192.168.0.101



        4、DESC: service not available now, maybe disk full, CL:
        解決:修改啟動腳本runbroker.sh,在里面增加一句話即可:        
        JAVA_OPT="${JAVA_OPT} -Drocketmq.broker.diskSpaceWarningLevelRatio=0.98"
        (磁盤保護的百分比設置成98%,只有磁盤空間使用率達到98%時才拒絕接收producer消息)


        常見問題處理:
            https://blog.csdn.net/sqzhao/article/details/54834761
            https://blog.csdn.net/mayifan0/article/details/67633729
            https://blog.csdn.net/a906423355/article/details/78192828

 

 


免責聲明!

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



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