1. 程式人生 > >RocketMQ 菜鳥筆記 (二) RocketMQ 4.1.0 安裝與入門例項

RocketMQ 菜鳥筆記 (二) RocketMQ 4.1.0 安裝與入門例項

一、安裝

環境:

Linux version 2.6.32-573.el6.x86_64
RocketMQ 4.1.0
java 1.8
maven 3.3.9 

步驟:

1.下載原始碼並編譯

git clone https://github.com/apache/incubator-rocketmq.git 
        mvn clean package install -Prelease-all assembly:assembly -U

在編譯過程中需要下載很多的maven依賴包,建議還是更改自己自己的maven setting.xml 為國內映象伺服器地址。
oschina mirror url:

http://maven.oschina.net/

2.啟動nameserver

在使用之前先簡單瞭解一下這個到底是什麼?

在分散式協作系統中,比較常用的是zookeeper,用來保證整個分散式系統的服務之間的選舉,資料的釋出和訂閱,分散式鎖的控制等。而rocketmq是沒有接入zookeeper,而是通過自己內部的nameserver來維護活躍的broker列表,這樣broker僅僅只維護資料的訊息轉發、儲存以及master slave之間的同步。

進入到編譯完成之後的target檔案,會存在一個apache-rocketmq-all資料夾,這是編譯完成之後的檔案也是需要得到的最終檔案。

  • a)配置ROCKETMQ_HOME
    在啟動之前需要配置ROCKETMQ_HOME環境變數,如下
vim /etc/profile
export ROCKETMQ_HOME=/usr/local/rocketmq/incubator-rocketmq/target/apache-rocketmq-all
PATH=$JAVA_HOME/bin:$M2_HOME/bin:$ROCKETMQ_HOME/bin:$PATH
source /etc/profile

通過echo $ROCKETMQ_HOME ,可以檢視ROCKETMQ_HOME 是否配置完成。

  • b)授權指定sh指令碼檔案許可權
    進入$ROCKETMQ_HOME/bin 資料夾 執行
chmod +x mqadmin mqbroker mqfiltersrv mqshutdown  mqnamesrv
  • c)啟動nameserver
nohup sh bin/mqnamesrv &

啟動之後檢視位於bin同級目錄下的nohup.out檔案

tailf nohup.out

這裡寫圖片描述

如圖表示啟動成功

3.啟動broker

  • a)配置NAMESRV_ADDR
 vim /etc/profile
export NAMESRV_ADDR=192.168.2.233:9876

儲存

  • b)nohup mqbroker >/var/log/mq.log &

這裡寫圖片描述

如上圖表示broker啟動成功

至此,rocketmq 安裝完畢。

二、入門例項

producer
package test.mq;

import com.alibaba.rocketmq.client.exception.MQClientException;
import com.alibaba.rocketmq.client.producer.DefaultMQProducer;
import com.alibaba.rocketmq.client.producer.SendResult;
import com.alibaba.rocketmq.common.message.Message;

/**
 * @Author chenfanglin 【[email protected]】
 * @Date 2017/4/2118:00
 */
public class TestProducerRocketMQ {

    public static void main(String[] args) throws MQClientException{

        DefaultMQProducer producer = new DefaultMQProducer("producerGroupName");
        producer.setNamesrvAddr("192.168.2.235:9876");
        producer.start();
        try {
            {
                //topic:主題 testTopic.tags:主題下的tag tagA.keys:keyA.body:具體業務訊息體
                Message msg = new Message("testTopic","tagA","keyA",("Hello World tagA!").getBytes());
                for(int i=100;i>0;i--){
                    if(i%2==0){
                        SendResult sendResult = producer.send(msg);
                        Thread.sleep(1000);
                        System.out.println("tagA send result:"+sendResult);
                    }else{
                        msg = new Message("testTopic","tagB","keyB",("Hello World tagB!").getBytes());
                        SendResult sendResult = producer.send(msg);
                        Thread.sleep(1000);
                        System.out.println("tagB send result:"+sendResult);
                    }
                }
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        //登出producer
        Runtime.getRuntime().addShutdownHook(new Thread(() -> producer.shutdown()));
        System.exit(0);
    }
}

consumer

package test.mq;

import com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;
import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import com.alibaba.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import com.alibaba.rocketmq.client.exception.MQClientException;
import com.alibaba.rocketmq.common.consumer.ConsumeFromWhere;
import com.alibaba.rocketmq.common.message.MessageExt;

import java.util.List;

/**
 * @Author chenfanglin 【[email protected]】
 * @Date 2017/4/2118:04
 */
public class TestConsumerRocketMQ {
    public static void main(String[] args) throws InterruptedException, MQClientException {

        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("testProducerGroupName");
        consumer.setNamesrvAddr("192.168.2.235:9876");

        //訂閱testTopic主題下,標籤為tagA或者tagB的訊息
        consumer.subscribe("testTopic", "tagA || tagB");
        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
        consumer.registerMessageListener(new MessageListenerConcurrently() {
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
                                                            ConsumeConcurrentlyContext context) {
                System.out.println(Thread.currentThread().getName() + " Receive New Messages: " + msgs);
                MessageExt msg = msgs.get(0);
                if (msg.getTopic().equals("testTopic")) {
                    if (msg.getTags() != null && msg.getTags().equals("tagA")) {
                        // 執行tagA的消費
                        String message = new String(msg.getBody());
                        System.out.println("receive tagA message:"+message);
                    }
                    else if (msg.getTags() != null && msg.getTags().equals("tagB")) {
                        // 執行tagB的消費
                        String message = new String(msg.getBody());
                        System.out.println("receive tagB message:"+message);
                    }

                }
                //回執訊息確認
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });
        consumer.start();
        System.out.println("Consumer Started.");
    }
}

資料:

相關推薦

RocketMQ 筆記 () RocketMQ 4.1.0 安裝入門例項

一、安裝 環境: Linux version 2.6.32-573.el6.x86_64 RocketMQ 4.1.0 java 1.8 maven 3.3.9 步驟: 1.下載原始碼並編譯 git clone https://gith

筆記 -- Chapter 3.4 環境變量

基本 developer 發的 面向對象 和數 中間 公司收購 kit 動態 3.4 Java環境的搭建 工欲善其事必先利其器。在學習Java語言之前,必須了解並搭建好它所需要的開發環境。要編譯和執行Java程序,JDK(Java Developers Kits)是必備

筆記 -- Chapter 5.4 Dead Code

div static imp pre jd-gui system 語句塊 nbsp ack 不知道有沒有前輩註意過,當你編寫一段“廢話式的代碼時”會給出一個Dead Code警告,點擊警告,那麽你所寫的廢物代碼會被編譯器消除,那麽如果你不理睬這個警告

筆記 -- Chapter 6.4 面向對象的三大特性

結構 加載 4.2 意思 允許 使用 重復 -s 完整 6.4.1 三大特性概述 面向對象的三大特性是Java中一個很重要的基本理念。   封裝是面向對象的核心思想。將對象的屬性和行為封裝起來,其載體就是類,類通常對客戶隱藏其實現細節,這就是封裝的意思。采用封裝的思想

Java程式設計思想 第四版(手碼原書+筆記) 第一章 1.12 併發程式設計

文中筆記均為個人觀點,如有錯誤請大家不吝指出,謝謝! 原書為《java程式設計思想 第四版 中文版》 在計算機程式設計中有一個基本概念,就是在同一時刻處理多個任務的思想。 許多程式設計問題都要求,程式能夠停下正在做的工作,轉而處理某個其

OPenCV筆記(3.4.1環境配置擴充套件包編譯 vs 2017 和Qt 5.11)

1.官網 https://opencv.org/2.下載標準包 https://opencv.org/releases.html下載winpack之後解壓,配置環境變數,此方法只能使用標準的釋出庫,一些特別的庫無法使用,比如人臉識別的庫3.如果需要人臉識別等特殊的庫3.41版

Visual Studio 2017 + OpenCV 3.4.1 全新安裝配置及可能遇到的問題解決

系統環境:windows 10 + VS 2017 + OpenCV3.4.1 01 安裝 VS 2017 在微軟官網下載、安裝VS2017 Community(社群免費版)。 02 安裝 OpenCV 3.4.1 在OpenCV官網下載

筆記 -- Chapter 3.1 計算機的基礎

計算機實現 因此 網絡連接 剪切 集成 光電 lang http use 3.1 計算機的基礎知識   每次想寫些什麽的時候,發現總是避不過計算機這塊,在菜鳥筆記 Chapter 1 計算機從0講起簡單介紹一下計算機硬件,以後計劃在線程和並發中詳細介紹一下計算機的運行原理

筆記 -- Question 3.1 聊聊跨平臺

ref 不同的 jvm 不同 mage 簡單 分享圖片 多繼承 用兩個    學習Java的時候總是被用來吹噓說Java的跨平臺多麽多麽NB,可認真想想是那麽回事嗎?還記得嗎Java是從C++發展而來的,不僅吸收了C++語言的各種優點,還摒棄了C++裏難以理解的多繼承、指針

筆記)echarts

菜鳥筆記之echarts 新建定時任務: @Component public class TimerTask { //設定定時任務啟動的時間(如下為每天定時10點進行定時任務) @Scheduled(cron = "0 00 10 * * ?") public

Java程式設計思想 第四版(手碼原書+筆記) 第二章 2.1 用引用操縱物件

上一篇: 第二章 一切都是物件 文中筆記均為個人觀點,如有錯誤請大家不吝指出,謝謝! 原書為《java程式設計思想 第四版 中文版》 每種程式語言都有自己的操縱記憶體中元素的方式。有時候,程式設計師必須注意將要處理的資料是什麼型別。你

ElasticSearch 筆記)ElasticSearch 安裝

環境 Red Hat 4.4.7-4 ElasticSearch 5.1.1 java 1.8.0_40 環境說明:ElasticSearch 在跳躍到版本號 5.1.1 之後 ,要求 java 版本號至少為 1.8 。

Linux筆記——BASH(

實驗環境:Ubantu  16.04 一、變數鍵盤讀取(read) read xxx #從鍵盤獲取輸入,存到xxx變數中 read #從鍵盤獲取輸入,存到REPLY變數中 echo -n “請輸入

Android筆記- 獲取未安裝的APK圖標、版本號、包名、名稱、是否安裝安裝、打開

ack ear 例如 start true intent ble post oca 周末閑來無事,把Android的基礎知識拿出來復習復習,今天主題是《獲取未安裝的APK圖標、版本號、包名、名稱、是否安裝、跳轉安裝、打開》 一、獲取APK圖標 通常讀取APK的圖標能夠用

學Python Day1.4(導入模塊Import、用戶交互Raw_input)

python導入模塊 1.什麽是模塊? 2.導入模塊 Import moduleName (自帶200多個模塊,第三方模塊上千) Python標準庫 如下:導入模塊os.system內的的df,查看內存 查看模塊os可以導入很多方法os. tab健

崛起 DB Chapter 4 MySQL 5.6的數據庫引擎

需要 操作系統 並發控制 客戶端 改變 一個數據庫 apt 限制 文件的 數據庫存儲引擎是數據庫底層的軟件組件,我們平常看不到,但是卻與我們操作數據庫息息相關。DBMS使用數據引擎進行創建、查詢、更新和刪除數據操作。不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定水平等功能

筆記 -- Chapter 3.2 Java簡介

快速 提高 組件 經理 1.5 規劃 企業 優化 blog 3.2 Java簡介 Java是一種高級的面向對象的程序設計語言。使用Java語言編寫的程序是跨平臺的,從PC機到手持電腦都有Java開發的程序和遊戲,Java程序可以在任何計算機、操作系統和支持Java的硬件設

筆記 -- Chapter 09 常見類和接口

菜鳥 compareto 必須 body 是我 不同 自己 jdk 深度   Java為我們提供了豐富的jar包支持,這其中很多都是我們日常開發所必須的,了解這些包和類,十分有助於我們的開發,深度了解源代碼也有助於我們代碼的優化和提高;JDK1.8為我們提供了多於4000個

關於閉包的筆記

oob element itl func inner gpo function .com scrip <!DOCTYPE html><html><head><meta charset="utf-8"><title>

正則表達式--anton筆記

-type git document cos nan 訪問 編輯 重寫 信用卡 正則表達式 正則表達式(Regular Expression)是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為"元字符")。 正則表達式使用單個字符串來描述、匹配