最完整的RocketMq部署程序,包括rocketmq-console部署和測試程序的介紹

1.RocketMq部署

本文詳細介紹了安裝rocketMq 前後的方法和一些注意事項 ,設備爲centos7,話不多說,begin。

準備工作

建議把jdk,maven,git先都裝上。

RocketMq程序的獲取

首先需要獲取rocketMq的程序,源程序或可執行包都可以,這邊直接獲取可執行程序。

wget http://www-us.apache.org/dist/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip
//如果已經有可以解壓zip的程序,可省去這一步
yum install zip unzip
//這邊可以使用-d指定解壓縮的位置
unzip rocketmq-all-4.2.0-bin-release.zip

這樣操作的話會在當前目錄下生成一個rocketmq的文件夾,進入該文件夾

cd rocketmq

編輯bin目錄下的 runserver.shrunbroker.shtools.sh 這三個文件,修改位置分別爲

JAVA_OPT="${JAVA_OPT} -server -Xms100m -Xmx100m -Xmn50m -XX:MetaspaceSize=12m -XX:MaxMetaspaceSize=32m"

JAVA_OPT="${JAVA_OPT} -server -Xms100m -Xmx100m -Xmn50m"

JAVA_OPT="${JAVA_OPT} -server -Xms100m -Xmx100m -Xmn25m -XX:PermSize=12m -XX:MaxPermSize=12m"

根據自己的配置酌情設置就行了。
接着開放一下端口,這個是iptables的策略,包括

-A INPUT -p tcp -m state --state NEW -m tcp --dport 9876 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10911 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10909 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT

然後重啓

service iptables restart 

建議把 10910加上,避免不必要的麻煩。一般雲主機在控制檯都可以直接編輯,如果沒有iptables,firewall就自己看着辦吧。

啓動NameServer

nohup sh bin/mqnamesrv &
//之後回車就行了,可以根據提示查看一下nohup.out的輸出內容,是否出現成功字樣

啓動Broker

先配置一下ip,目的是爲了可以使用公網ip可以訪問到broker。

vim conf/broker.conf

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr=xxxx:9876
brokerIP1=xxxx

啓動

//這邊的ip可以是localhost,指定本機ip應該也可以
nohup sh bin/mqbroker -n xxxx:9876 autoCreateTopicEnable=true -c conf/broker.conf & 

查看log日誌

log日誌位於~/logs/rocketmqlogs/ 路徑下,包括但不限於namesrv.log和broker.log。注意broker日誌內容的broker的ip得是公網ip,外部機器纔可以訪問到。

2.運維工具部署

獲取程序

git clone -b release-rocketmq-console-1.0.0 https://github.com/apache/rocketmq-externals.git
cd rocketmq-externals/rocketmq-console/

參數配置

vi src/main/resources/application.properties

照着這個改就行了。

#管理後臺訪問上下文路徑,默認爲空,如果填寫,一定要前面加“/”,後面不要加,否則啓動報錯
server.contextPath=/rocketmq
#訪問端口
server.port=8080
#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
#logback配置文件路徑
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
#Name Server地址,修改成你自己的服務地址
rocketmq.config.namesrvAddr=xxxx:9876
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#rocketmq-console’s data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don’t want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true

運行程序

沒有mvn,自行安裝。https://www.cnblogs.com/clicli/p/5866390.html

mvn clean package -Dmaven.test.skip=true
java -jar target/rocketmq-console-ng-1.0.0.jar

啓動成功後訪問http://localhost:8080/rocketmq就可以了,當然是服務器的ip地址了。

3.實際測試

代碼獲取

代碼我偷的,不會用,主要是拿來先測一下。

//依賴
<dependency>
      <groupId>org.apache.rocketmq</groupId>
      <artifactId>rocketmq-client</artifactId>
      <version>4.2.0</version>
</dependency>
<dependency>
      <groupId>com.alibaba.rocketmq</groupId>
      <artifactId>rocketmq-all</artifactId>
      <version>3.6.2.Final</version>
      <type>pom</type>
</dependency>

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

        // 聲明並初始化一個producer
        // 需要一個producer group名字作爲構造方法的參數,這裏爲producer1
        DefaultMQProducer producer = new DefaultMQProducer("producer1");
        producer.setVipChannelEnabled(false);
        // 設置NameServer地址,此處應改爲實際NameServer地址,多個地址之間用;分隔
        // NameServer的地址必須有
        // producer.setClientIP("xxxx");
        // producer.setInstanceName("Producer");
        producer.setNamesrvAddr("xxxx:9876");

        // 調用start()方法啓動一個producer實例
        producer.start();

        // 發送1條消息到Topic爲TopicTest,tag爲TagA,消息內容爲“Hello RocketMQ”拼接上i的值
        try {
            // 封裝消息
            Message msg = new Message("TopicTest",// topic
                    "TagA",// tag
                    ("Hello RocketMQ").getBytes(RemotingHelper.DEFAULT_CHARSET)// body
            );
            // 調用producer的send()方法發送消息
            // 這裏調用的是同步的方式,所以會有返回結果
            SendResult sendResult = producer.send(msg);
            // 打印返回結果
            System.out.println(sendResult);
        } catch (RemotingException e) {
            e.printStackTrace();
        } catch (MQBrokerException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        //發送完消息之後,調用shutdown()方法關閉producer
        System.out.println("send success");
        producer.shutdown();
    }
}

//Consumer 
public class Consumer {

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

        //聲明並初始化一個consumer
        //需要一個consumer group名字作爲構造方法的參數,這裏爲consumer1
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer1");
        //consumer.setVipChannelEnabled(false);
        //同樣也要設置NameServer地址
        consumer.setNamesrvAddr("xxxx:9876");

        //這裏設置的是一個consumer的消費策略
        //CONSUME_FROM_LAST_OFFSET 默認策略,從該隊列最尾開始消費,即跳過歷史消息
        //CONSUME_FROM_FIRST_OFFSET 從隊列最開始開始消費,即歷史消息(還儲存在broker的)全部消費一遍
        //CONSUME_FROM_TIMESTAMP 從某個時間點開始消費,和setConsumeTimestamp()配合使用,默認是半個小時以前
        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);

        //設置consumer所訂閱的Topic和Tag,*代表全部的Tag
        consumer.subscribe("TopicTest", "*");

        //設置一個Listener,主要進行消息的邏輯處理
        consumer.registerMessageListener(new MessageListenerConcurrently() {

            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
                                                            ConsumeConcurrentlyContext context) {

                System.out.println(Thread.currentThread().getName() + " Receive New Messages: " + msgs);
                System.out.println("----------------------------------------------------------------------------------");
                //返回消費狀態
                //CONSUME_SUCCESS 消費成功
                //RECONSUME_LATER 消費失敗,需要稍後重新消費
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });
        //調用start()方法啓動consumer
        consumer.start();
        System.out.println("Consumer Started.");
    }
}
--------------------- 
作者:innerpeacez 
來源:CSDN 
原文:https://blog.csdn.net/zhwyj1019/article/details/80264698 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

運行

先啓動哪個程序不用我多說了8。

4.開始學習~

主要還欠缺控制檯的權限驗證和綁定消費者時的權限驗證。之後可以擴展多個nameserver保證可用性,擴展broker嘗試負載均衡。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章