1. 程式人生 > >RocketMQ初入門踩坑記

RocketMQ初入門踩坑記

本文主要是講在Centos中安裝RocketMQ並做簡單的示例。如果你按照本文安裝100%是可以成功的,如果按照阿里官方的說明,那隻能呵呵了~

安裝

官方地址為:https://rocketmq.apache.org/docs/quick-start/
本人安裝如下:

//下載最新的rocketmq
wget http://apache-mirror.8birdsvideo.com/rocketmq/4.4.0/rocketmq-all-4.4.0-bin-release.zip

//解壓
unzip rocketmq-all-4.4.0-bin-release.zip

//切換到mq目錄
cd rocketmq-all-4.4.0-bin-release

//name server 啟動
nohup ./bin/mqnamesrv -n 111.231.XX.XX:9876 &

//-c conf/broker.conf autoCreateTopicEnable=true 引數需要帶上,不然topic需要手動建立
nohup sh bin/mqbroker -n 111.231.XX.XX:9876 -c conf/broker.conf autoCreateTopicEnable=true &

配置,切換到mq的bin目錄下

cd rocketmq-all-4.4.0-bin-release/bin

rocketmq預設最低記憶體為4g,機器記憶體不夠用的話,找到runserver.sh和runbroker.sh編輯如下:

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

執行

執行官方demo,發現如下錯誤:

21:20:22.249 [NettyClientSelector_1] INFO  RocketmqRemoting - closeChannel: close the connection to remote address[] result: true
org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout
    at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:640)
    at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1310)
    at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1256)
    at org.apache.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:339)
    at org.apache.rocketmq.example.simple.Producer.main(Producer.java:40)

執行以下命令檢視broker配置並寫入遠端ip地址:

//檢視broker配置
sh ./bin/mqbroker -m

//關閉broker
sh bin/mqshutdown broker

//將本機遠端ip寫入配置檔案中
echo 'brokerIP1=111.231.XX.XX' > conf/broker.properties 

//重新啟動broker
nohup sh bin/mqbroker -n 111.231.XX.XX:9876 -c conf/broker.conf autoCreateTopicEnable=true &

管理控制檯安裝

Git地址:https://github.com/apache/rocketmq-externals/tree/master/rocketmq-console

git clone [email protected]:apache/rocketmq-externals.git
cd  rocketmq-external/rocketmq-console/
mvn clean package -Dmaven.test.skip=true

打完包後,執行以下命令

java -jar rocketmq-console-ng-1.0.1.jar --server.port=12181 --rocketmq.config.namesrvAddr=111.231.XX.XX:9876

開啟 http://localhost:12181訪問控制檯,像如下

在Procuder這個頁面查詢時會出現如下異常:

java.lang.RuntimeException: org.apache.rocketmq.client.exception.MQBrokerException: CODE: 1  DESC: the producer group[] not exist
For more information, please visit the url, http://rocketmq.apache.org/docs/faq/
        at com.google.common.base.Throwables.propagate(Throwables.java:160)
        at org.apache.rocketmq.console.service.impl.ProducerServiceImpl.getProducerConnection(ProducerServiceImpl.java:38)
        at org.apache.rocketmq.console.controller.ProducerController.producerConnection(ProducerController.java:39)

請把程式碼中producer.shutdown()這句注掉,生產環境中請加上。

 //producer.shutdown();

程式碼示例(官方)

生產者

package org.apache.rocketmq.example.simple;

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;

public class Producer {
    public static void main(String[] args) throws MQClientException, InterruptedException {

        DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");

        producer.setNamesrvAddr("111.231.XX.XX:9876");
        producer.start();

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

            } catch (Exception e) {
                e.printStackTrace();
            }

        //producer.shutdown();
    }
}

消費者

package org.apache.rocketmq.example.simple;

import java.util.List;
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.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.MessageExt;

public class PushConsumer {

    public static void main(String[] args) throws InterruptedException, MQClientException {
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("CID_JODIE_1");
        consumer.subscribe("TopicTest", "*");
        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
        //wrong time format 2017_0422_221800
        //consumer.setConsumeTimestamp("20181109221800");
        consumer.setNamesrvAddr("111.231.XX.XX:9876");
        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.printf("Consumer Started.%n");
    }
}

有更多的文章,請關注檢視,更有面試寶典相送

相關推薦

RocketMQ入門

本文主要是講在Centos中安裝RocketMQ並做簡單的示例。如果你按照本文安裝100%是可以成功的,如果按照阿里官方的說明,那隻能呵呵了~ 安裝 官方地址為:https://rocketmq.apache.org/docs/quick-start/ 本人安裝如下: //下載最新的rocketmq wg

Visual Studio For MacOS (二)

mirrors class app macosx andro mce 資料 library devel Visual Studio For MacOS安裝安卓SDK。 系統默認安裝了安卓6.0 API23的SDK。 但是我需要安卓7.0的,API24. 遂安裝。

spark共享變量

park oid and 共享變量 roi syn out his andro %E5%9C%A8android%E4%B8%AD%E6%80%8E%E4%B9%88%E7%94%A8this removeviewinlayout?к????? repo????л???

Linux使用

gre 16px -- 機器 操作 onf 問題: 失敗 gbk Ubuntu安裝坑: 1、對於新手第一次安裝ubuntu,特殊情況會出現因為分辨率問題導致安裝界面不全,無法進行下一步操作。 解決方案:使用alt+鼠標左鍵拖動屏幕Linux文件名亂碼問題:

java-getResourceAsStream

mov load color () tar type 當前 blog ase 本文主要是研究下面集中方法到底誰才能真正的load到文件,你能一眼看出來嗎? GetResourcesSample.class.getClassLoader.getResourceAsStream

c# 重載運算符(ovveride operator),關於null比對

漏洞 pre console blog 為什麽 留言 報表 bool 解決辦法 場景描述: 需要比對兩個版本的對應對象是否完全一致(每個屬性值一致),不一致的導出報表顏色標識,以便提醒後續使用報表人員。 實現思路: 對象重載ToString方法,另實現一比對基類(為了通用)

ABP項目入門

src load dbconnect 管理 .json fig 連接 登錄 admin 1.下載ABP項目模板, 打開網址https://aspnetboilerplate.com/Templates,選擇MultiPage Web Application,輸入項目名稱和驗

Spring @Transactional

然而 效果 記錄 dcl iso 如果 分庫分表 ignore mar @Transactional踩坑記 總述 ? Spring在1.2引入@Transactional註解, 該註解的引入使得我們可以簡單地通過在方法或者類上添加@Transactional註解,實現事務控

桌面應用“標註器”打包

環境 的確 變量 標註 imp sci 技術 報錯 編寫 昨天(2018/4/6)花了幾乎一天的時間打包我的桌面應用“標註器”。下午3點完成最後的編寫之後,準備在女朋友雅喻的電腦上配環境打包(我的電腦不能用pyinstaller打包,重裝也不行,玄學錯誤。)。雅喻的電腦上缺

[轉]Spark :數據庫(Hbase+Mysql)

cep 直接 策略 https rds 但是 更新 base ID https://cloud.tencent.com/developer/article/1004820 Spark 踩坑記:數據庫(Hbase+Mysql) 前言 在使用Spark Streaming的過程

uWSGI

dex wsgi oba 啟動 監聽 head HR nvi header 一、協議的一致性 uWSGI 是在 nginx 後面,所以 nginx 轉發請求時的協議要和 uWSGI 監聽的協議一致。否則就會出現問題,因為是三者之間的通信,排查起來需要想清楚請求傳遞的次序:

Vue項目~

found 成功 原因 提示 數據文件 support then ror tro 最近在寫一個Vue的項目~踩了很多坑,下面總結一下出現的問題 1.空白頁面,不提示報錯,但是什麽都沒有 main.js const app = new Vue({ router }).$

create-react-app

tcs onf class working zip als mpi iconfont hat 前言 哇,不的不說這個react 這個腳手架create-react-app腳確實有很多問題,哈哈,下面來看看吧有哪些坑: 引用sass或者less 記得16

.NetCore SignalR

cred this arp 虛擬機 user fault new alt dem 背景 由於最近公司要做微信小程序聊天,所以.NetFramwork版本的SignalR版本的不能用了。因為小程序裏沒有windows對象,導致JQuery無法使用。而Signalr的 js客戶

Win10 安裝配置 MongoDB 4.0

repl 其他 文件夾 power chm font 無人值守安裝 path .org redis 官方沒有 Windows 版的,微軟維護的已經好久沒更新了,所以就在想著換成 MongoDB。 於是一趟被我復雜化的踩坑之旅就開始了,同時也記錄一下,避免有人遇見跟我一樣的

微信公眾號支付

系統 shm efi bsp 網絡異常 router nec 平臺 wiki   前兩周做微信H5支付,在瀏覽器端用的,天真地以為app掛到公眾號中也能用,結果不行>"<|||| ,只好再對接一次公眾號支付,微信的支付對接下來總體感覺就是封裝地不如支付寶,文檔不

Springcloud---使用feignclient遠端呼叫服務404

公司專案進行微服務改造,由之前的dubbo改用SpringCloud,微服務之間通過FeignClient進行呼叫,今天在測試的時候,eureka註冊中心有相應的服務,但feignclient就是無法調通,一直報404錯誤,排查過程如下: 一、問題:   服務提供方定義的介面如下: /** *

vlc-android 編譯

VLC-Android編譯踩過的坑及感悟,整理髮表出來,希望對大家有幫助。 一、建議掌握的基本知識【否則在編譯過程中,連錯誤都不知道怎麼查,如下一些基本點是針對linux小白的,大牛勿噴】 a. Makefile的工作原理,明白Rule-Target-Prerequisites-Reci

mpvue

node --versionnpm --versionvue -V 微信開發者工具:開發、除錯和模擬執行微信小程式的最核心的工具了,所以必須安裝 # 全域性安裝 vue-cli $ npm install --global vue-cli # 建立一個基於 mpvue-quickstart 模

技巧:Ubuntu之網絡配置哪裏找

改變 .com 方式 alt style man 情況 -c file 今天在虛擬機中遇到一個關於網絡配置的坑,在此記錄下來。 我們都知道虛擬機系統(此處指的是vmware)中,虛擬網絡主要由三個方式實現: 橋接網絡 NAT轉換 主機共享網絡 在這三種方式