Centos 安裝 RocketMq

官網和網上的各種教程都有坑,這裏提供樓主親測安裝教程

1、下載安裝

前提已經安裝java環境,這裏不再贅述
http://rocketmq.apache.org/docs/quick-start/

從官網下載安裝包

wget http://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.4.0/rocketmq-all-4.4.0-source-release.zip

安裝maven

wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
yum -y install apache-maven

安裝unzip

yum install unzip

安裝RocketMq

 unzip rocketmq-all-4.4.0-source-release.zip
 cd rocketmq-all-4.4.0/
 mvn -Prelease-all -DskipTests clean install -U 
 cd distribution/target/apache-rocketmq

2、啓動 Name Server

nohup sh mqnamesrv -n localhost:9876 > ./srv.log & #或使用外網ip,配置日誌到srv.log

調低Rocketmq使用內存,默認8g,內存不夠會報錯

vim bin/runbroker.sh
#修改對應的內存配置
#-server -Xms8g -Xmx8g -Xmn4g
-server -Xms256m -Xmx256m -Xmn128m

配置Broker,

vim conf/brokder.conf 

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr = 127.0.0.1:9876
brokerIP1 = 公網IP #使用內網IP,無法遠程訪問
autoCreateTopicEnable = true

啓動Broker

nohup sh bin/mqbroker -c conf/broker.conf -n 127.0.0.1:9876 > ./broker.log &

2、配置監控平臺 rocketmq_console

#使用git命令下載項目源碼,由於我們僅需要rocketmq-console,故下載此項目對應分支即可。
 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=10.0.74.198:9876 #集羣10.0.74.198:9876 ;10.0.74.198: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

Name Server地址默認爲空,註釋說可以在啓動項目後在後臺配置,經測試,後臺配置切換失敗,有報錯,所以打包前需修改配置文件明確給出Name Server地址,或者啓動服務的時候給出rocketmq.config.namesrvAddr參數值。

將項目打成jar包,並運行jar文件。

$ mvn clean package -Dmaven.test.skip=true
$ java -jar target/rocketmq-console-ng-1.0.0.jar
#如果配置文件沒有填寫Name Server
$ java -jar target/rocketmq-console-ng-1.0.0.jar --rocketmq.config.namesrvAddr='10.0.74.198:9876'

啓動成功後,訪問地址http://localhost:8080/rocketmq, 即可進入管理後臺操作。

在這裏插入圖片描述

3、java測試代碼

maven:

  <dependency>
        <groupId>org.apache.rocketmq</groupId>
        <artifactId>rocketmq-client</artifactId>
        <version>4.3.0</version>
    </dependency>

生產者SyncProducer

public class SyncProducer {
    public static void main(String[] args) throws Exception {
        //Instantiate with a producer group name.
        DefaultMQProducer producer = new
            DefaultMQProducer("please_rename_unique_group_name");
        // Specify name server addresses.
        producer.setNamesrvAddr("localhost:9876");
        //Launch the instance.
        producer.start();
        for (int i = 0; i < 100; i++) {
            //Create a message instance, specifying topic, tag and message body.
            Message msg = new Message("TopicTest" /* Topic */,
                "TagA" /* Tag */,
                ("Hello RocketMQ " +
                    i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
            );
            //Call send message to deliver message to one of brokers.
            SendResult sendResult = producer.send(msg);
            System.out.printf("%s%n", sendResult);
        }
        //Shut down once the producer instance is not longer in use.
        producer.shutdown();
    }
}

消費者AsyncProducer

public class AsyncProducer {
    public static void main(String[] args) throws Exception {
        //Instantiate with a producer group name.
        DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");
        // Specify name server addresses.
        producer.setNamesrvAddr("localhost:9876");
        //Launch the instance.
        producer.start();
        producer.setRetryTimesWhenSendAsyncFailed(0);
        for (int i = 0; i < 100; i++) {
                final int index = i;
                //Create a message instance, specifying topic, tag and message body.
                Message msg = new Message("TopicTest",
                    "TagA",
                    "OrderID188",
                    "Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));
                producer.send(msg, new SendCallback() {
                    @Override
                    public void onSuccess(SendResult sendResult) {
                        System.out.printf("%-10d OK %s %n", index,
                            sendResult.getMsgId());
                    }
                    @Override
                    public void onException(Throwable e) {
                        System.out.printf("%-10d Exception %s %n", index, e);
                        e.printStackTrace();
                    }
                });
        }
        //Shut down once the producer instance is not longer in use.
        producer.shutdown();
    }
}

在這裏插入圖片描述

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