RocketMQ的安裝與使用

1.下載jdk並安裝

sudo tar xvzf jdk-7u65-linux-x64.gz -C /usr/local
cd /usr/local
ln -s jdk1.8.0_65/ jdk
cd bin
sudo ln -s /usr/local/jdk/bin/java


2.下載RocketMQ並安裝

官網下不下來

備用下載地址:http://download.csdn.net/detail/wtwshui/9194133#comment

sudo tar -zxvf alibaba-rocketmq-3.2.6.tar.gz -C /usr/local
cd /usr/local
sudo ln -s alibaba-rocketmq rocketmq

3.設置環境變量

export PATH=$PATH:/usr/local/bin
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export ROCKETMQ_HOME=/usr/local/rocketmq
export PATH=$PATH::$ROCKETMQ_HOME/bin
cd /usr/local/rocketmq/bin
sudo sh os.sh

4.開啓服務

nohup sh mqnamesrv &
nohup sh  mqbroker -n "127.0.0.1:9876" &
5.驗證

完成上述步驟後,如果出現了錯誤,請試着修改runserver.sh和runbroker.sh這二個文件中的jvm配置選項,具體的jvm的含義如下:

JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:PermSize=128m -XX:MaxPermSize=320m"

-Xmx:設置JVM最大可用內存爲Xmx M。
-Xms:設置JVM促使內存爲Xms m。此值可以設置與-Xmx相同,以避免每次垃圾回收完成後JVM重新分配內存。
-Xmn:設置年輕代大小。整個JVM內存大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小爲64m,所以增大年輕代後,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置爲整個堆的3/8。
-Xss:設置每個線程的堆棧大小。JDK5.0以後每個線程堆棧大小爲1M,以前每個線程堆棧大小爲256K。更具應用的線程所需內存大小進行調整。在相同物理內存下,減小這個值能生成更多的線程。但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。

-XX:MaxPermSize:設置持久代大小。

使用jps命令列出所有的java進程

如果出現三個進程則表示安裝配置的成功

6.編寫代碼

消費者:

public class Consumer {
 
    public static void main(String[] args) throws InterruptedException, MQClientException {
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("QuickStartConsumer");
         
        consumer.setNamesrvAddr("127.0.0.1:9876");
        consumer.setInstanceName("QuickStartConsumer");
        consumer.subscribe("QuickStart", "*");
         
        consumer.registerMessageListener(new MessageListenerConcurrently() {
 
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
                    ConsumeConcurrentlyContext context) {
                System.out.println(Thread.currentThread().getName() + " Receive New Messages: " + msgs);
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });
 
        consumer.start();
 
        System.out.println("Consumer Started.");
    }
}
生產者:

public class Producer {
    public static void main(String[] args) throws MQClientException, InterruptedException {
        DefaultMQProducer producer = new DefaultMQProducer("QuickStartProducer");
        producer.setNamesrvAddr("127.0.0.1:9876");
        producer.setInstanceName("QuickStartProducer");
        producer.start();
  
        for (int i = 0; i < 1000; i++) {
            try {
                Message msg = new Message("QuickStart",// topic
                    "TagA",// tag
                    ("Hello RocketMQ ,QuickStart" + i).getBytes()// body
                        );
                SendResult sendResult = producer.send(msg);
                System.out.println(sendResult);
            }
            catch (Exception e) {
                e.printStackTrace();
                Thread.sleep(1000);
            }
        }
  
        producer.shutdown();
    }
}

如果運行上述的程序出現異常,請看看第五步是不是有問題,如果沒有的話,使用下面命令關閉防火牆

sudo ufw disable

7.運行結果






8.參考網站:http://sofar.blog.51cto.com/353572/1540874

                 http://www.uml.org.cn/zjjs/201504021.asp








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