1. 程式人生 > >(一)ActiveMQ學習教程——安裝(和topic例項)

(一)ActiveMQ學習教程——安裝(和topic例項)

背景:ActiveMQ 是Apache出品,最流行的,能力強勁的開源訊息匯流排。
選擇ActiveMQ作為JMS的入門學習中介軟體,是因為其擁有以下優點

  • 1.多種語言和協議編寫客戶端。語言: Java, C, C++, C#, Ruby, Perl, Python, PHP。應用協議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
    2.完全支援JMS1.1和J2EE 1.4規範 (持久化,XA訊息,事務)
    3.對Spring的支援,ActiveMQ可以很容易內嵌到使用Spring的系統裡面去,而且也支援Spring2.0的特性
    4.完全支援JMS1.1和J2EE 1.4規範 (持久化,XA訊息,事務)
    5.通過了常見J2EE伺服器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的測試,其中通過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動的部署到任何相容J2EE 1.4 商業伺服器上
    6.支援多種傳送協議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
    7.從設計上保證了高效能的叢集,客戶端-伺服器,點對點
    8.支援Ajax
    9.支援與Axis的整合
    10.可以很容易得呼叫內嵌JMS provider,進行測試

學會了ActiveMQ之後,其它供應商的MQ也可以在短時間內快速上手。

安裝:
ActiveMQ(本文簡稱MQ)要求JDK1.5以上,推薦1.6以上版本。還沒安裝JDK的朋友,請先安裝,在此不贅訴了。
安裝完JDK後,從 http://activemq.apache.org/download.html下載MQ的最新版本,本教程使用版本為5.5。
解壓後,可以看到MQ目錄下有以下檔案和目錄
activemq-all-5.5.0.jar:所有MQ JAR包的集合,用於使用者系統呼叫
bin:其中包含MQ的啟動指令碼
conf:包含MQ的所有配置檔案
data:日誌檔案及永續性訊息資料
example:MQ的示例
lib:MQ執行所需的所有Lib
webapps
:MQ的Web控制檯及一些相關的DEMO


啟動MQ:
雙擊bin目錄下的activemq.bat檔案即可啟動MQ


第一個示例:

新建一個JAVA工程,引用activemq-all-5.5.0.jar,SLFAPI其及對應版本LOG4J的JAR包(懶的上網找的到附件裡下載)

Publisher.java
Java程式碼  收藏程式碼
  1. import java.util.Hashtable;  
  2. import java.util.Map;  
  3. import javax.jms.Connection;  
  4. import javax.jms.ConnectionFactory;  
  5. import javax.jms.Destination;  
  6. import javax.jms.JMSException;  
  7. import javax.jms.MapMessage;  
  8. import javax.jms.Message;  
  9. import javax.jms.MessageProducer;  
  10. import javax.jms.Session;  
  11. import org.apache.activemq.ActiveMQConnectionFactory;  
  12. import org.apache.activemq.command.ActiveMQMapMessage;  
  13. publicclass Publisher {  
  14.     protectedint MAX_DELTA_PERCENT = 1;  
  15.     protected Map<String, Double> LAST_PRICES = new Hashtable<String, Double>();  
  16.     protectedstaticint count = 10;  
  17.     protectedstaticint total;  
  18.     protectedstatic String brokerURL = "tcp://localhost:61616";  
  19.     protectedstatictransient ConnectionFactory factory;  
  20.     protectedtransient Connection connection;  
  21.     protectedtransient Session session;  
  22.     protectedtransient MessageProducer producer;  
  23.     public Publisher() throws JMSException {  
  24.         factory = new ActiveMQConnectionFactory(brokerURL);  
  25.         connection = factory.createConnection();  
  26.         try {  
  27.         connection.start();  
  28.         } catch (JMSException jmse) {  
  29.             connection.close();  
  30.             throw jmse;  
  31.         }  
  32.         session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
  33.         producer = session.createProducer(null);  
  34.     }  
  35.     publicvoid close() throws JMSException {  
  36.         if (connection != null) {  
  37.             connection.close();  
  38.         }  
  39.     }  
  40.     publicstaticvoid main(String[] args) throws JMSException {  
  41.         Publisher publisher = new Publisher();  
  42.         while (total < 1000) {  
  43.             for (int i = 0; i < count; i++) {  
  44.                 publisher.sendMessage(args);  
  45.             }  
  46.             total += count;  
  47.             System.out.println("Published '" + count + "' of '" + total + "' price messages");  
  48.             try {  
  49.               Thread.sleep(1000);  
  50.             } catch (InterruptedException x) {  
  51.             }  
  52.         }  
  53.         publisher.close();  
  54.     }  
  55.     protectedvoid sendMessage(String[] stocks) throws JMSException {  
  56.         int idx = 0;  
  57.         while (true) {  
  58.             idx = (int)Math.round(stocks.length * Math.random());  
  59.             if (idx < stocks.length) {  
  60.                 break;  
  61.             }  
  62.         }  
  63.         String stock = stocks[idx];  
  64.         Destination destination = session.createTopic("STOCKS." + stock);  
  65.         Message message = createStockMessage(stock, session);  
  66.         System.out.println("Sending: " + ((ActiveMQMapMessage)message).getContentMap() + " on destination: " + destination);  
  67.         producer.send(destination, message);  
  68.     }  
  69.     protected Message createStockMessage(String stock, Session session) throws JMSException {  
  70.         Double value = LAST_PRICES.get(stock);  
  71.         if (value == null) {  
  72.             value = new Double(Math.random() * 100);  
  73.         }  
  74.         // lets mutate the value by some percentage
  75.         double oldPrice = value.doubleValue();  
  76.         value = new Double(mutatePrice(oldPrice));  
  77.         LAST_PRICES.put(stock, value);  
  78.         double price = value.doubleValue();  
  79.         double offer = price * 1.001;  
  80.         boolean up = (price > oldPrice);  
  81.         MapMessage message = session.createMapMessage();  
  82.         message.setString("stock", stock);  
  83.         message.setDouble("price", price);  
  84.         message.setDouble("offer", offer);  
  85.         message.setBoolean("up", up);  
  86.         return message;  
  87.     }  
  88.     protecteddouble mutatePrice(double price) {  
  89.         double percentChange = (2 * Math.random() * MAX_DELTA_PERCENT) - MAX_DELTA_PERCENT;  
  90.         return price * (100 + percentChange) / 100;  
  91.     }  
  92. }  


Consumer.java
Java程式碼  收藏程式碼
  1. import javax.jms.Connection;  
  2. import javax.jms.ConnectionFactory;  
  3. import javax.jms.Destination;  
  4. import javax.jms.JMSException;  
  5. import javax.jms.MessageConsumer;  
  6. import javax.jms.Session;  
  7. import org.apache.activemq.ActiveMQConnectionFactory;  
  8. publicclass Consumer {  
  9.     privatestatic String brokerURL = "tcp://localhost:61616";  
  10.     privatestatictransient ConnectionFactory factory;  
  11.     privatetransient Connection connection;  
  12.     privatetransient Session session;  
  13.     public Consumer() throws JMSException {  
  14.         factory = new ActiveMQConnectionFactory(brokerURL);  
  15.         connection = factory.createConnection();  
  16.         connection.start();  
  17.         session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
  18.     }  
  19.     publicvoid close() throws JMSException {  
  20.         if (connection != null) {  
  21.             connection.close();  
  22.         }  
  23.     }      
  24.     publicstaticvoid main(String[] args) throws JMSException {  
  25.         Consumer consumer = new Consumer();  
  26.         for (String stock : args) {  
  27. 相關推薦

    ActiveMQ學習教程——安裝topic例項

    背景:ActiveMQ 是Apache出品,最流行的,能力強勁的開源訊息匯流排。選擇ActiveMQ作為JMS的入門學習中介軟體,是因為其擁有以下優點 1.多種語言和協議編寫客戶端。語言: Java, C, C++, C#, Ruby, Perl, Python, PHP。

    MySql、MySQL基礎、庫操作表操作

    MySQL資料庫 MySQL資料庫是一種C/S結構的軟體:客戶端/服務端,若想訪問伺服器,必須通過客戶端(伺服器一直執行,而客戶端在需要使用的時候執行。) 互動方式: 1、客戶端連線認證:連線伺服器,認證身份:mysql.exe -hPup 2、客戶端傳送S

    Coursera吳恩達機器學習教程筆記

        人工智慧行業如火如荼,想要入門人工智慧,吳恩達老師的機器學習課程絕對是不二之選(當然,這不是我說的,是廣大網友共同認為的)    教程的地址連結:    有的同學可能進不去這個網站,解決辦法參照如下連結:    這個辦法本人親測有效,因為我看的時候也打不開(囧!!) 

    未完待續機器學習教程視頻資料匯總

    提升 isp pla blog sso 相關 學習機 you mage 在學習機器學習的過程中,我陸陸續續收集了些免費的教程資料,希望能和您共享。 如果您有好的網站希望分享就評論吧,我也會整理到文章中。 1 機器學習基礎篇 (1)課程資源 吳恩達《機器學習》cou

    srping-data學習筆記傳統方式訪問數據庫實現弊端分析

    https 下載 edi 存在 關系型 mys work rpi nbsp spring-data是一系列項目的集合,涵蓋訪問關系型、非關系型等各種數據源的子項目 spring data jpa 關系型 spring data mongo db spring data r

    redis初識與安裝windows

    Redis是什麼? Redis是一個開源免費的,效能較高的key-value資料庫,我們常見的mysql叫關係型資料庫,redis屬於非關係型資料庫。 所謂效能高,讀的速度11000次/s,寫的速度是81000次/s,(直接在記憶體中)注意是理論速度,實測沒

    web前端學習JavaScript學習筆記部分1-- JavaScript基礎教程

    1、JavaScript基礎教程 1.1、Javascript基礎-介紹、實現、輸出 1.1.1、JavaScript是網際網路上最流行的指令碼語言,這門語言可用於web和HTML,更可廣泛用於服務端、pc端、移動端。 1.1.2、JavaScript指令碼語言   JavaScript是一種輕量級的

    Swift教程_零基礎學習Swift完整例項_swift基礎簡單值、控制流、方法閉包

    三、Swift基礎介紹 本章將對Swift做一個簡單說明,內容取自《The Swift Programming Language》,並加之自己的理解。首先swift全域性作用域中的程式碼會被自動當做程

    spring-cloud學習教程/視訊最新最全

    下載地址: 課程目錄         第1篇 分散式開發與SpringCloud簡介                 小節1: 分散式開發簡介                 小節2: 線上筆記 分散式開發簡介                 小節3: SpringCl

    Deep Learning 1_深度學習UFLDL教程:Sparse Autoencoder練習斯坦福大學深度學習教程

    1前言           本人寫技術部落格的目的,其實是感覺好多東西,很長一段時間不動就會忘記了,為了加深學習記憶以及方便以後可能忘記後能很快回憶起自己曾經學過的東西。      首先,在網上找了一些資料,看見介紹說UFLDL很不錯,很適合從基礎開始學習,Adrew Ng大牛寫得一點都不裝B,感覺非常好

    Deep Learning 4_深度學習UFLDL教程:PCA in 2D_Exercise斯坦福大學深度學習教程

    前言      本節練習的主要內容:PCA,PCA Whitening以及ZCA Whitening在2D資料上的使用,2D的資料集是45個數據點,每個資料點是2維的。要注意區別比較二維資料與二維影象的不同,特別是在程式碼中,可以看出主要二維資料的在PCA前的預處理不需要先0均值歸一化,而二維自然影象需要先

    Deep Learning 3_深度學習UFLDL教程:預處理之主成分分析與白化_總結斯坦福大學深度學習教程

    1PCA     ①PCA的作用:一是降維;二是可用於資料視覺化; 注意:降維的原因是因為原始資料太大,希望提高訓練速度但又不希望產生很大的誤差。     ② PCA的使用場合:一是希望提高訓練速度;二是記憶體太小;三是希望資料視覺化。     ③用PCA前的預處理:(1)規整化特徵的均值大致為0;(

    Deep Learning 19_深度學習UFLDL教程:Convolutional Neural Network_Exercise斯坦福大學深度學習教程

    基礎知識 概述       CNN是由一個或多個卷積層(其後常跟一個下采樣層)和一個或多個全連線層組成的多層神經網路。CNN的輸入是2維影象(或者其他2維輸入,如語音訊號)。它通過區域性連線和權值共享,再通過池化可得到平移不變特徵。CNN的另一個優點就是易於訓練

    Deep Learning 8_深度學習UFLDL教程:Stacked Autocoders and Implement deep networks for digit classification_Exercise斯坦福大學深度學習教程

    前言 2.實驗環境:win7, matlab2015b,16G記憶體,2T硬碟 3.實驗內容:Exercise: Implement deep networks for digit classification。利用深度網路完成MNIST手寫數字資料庫中手寫數字的識別。即:用6萬個已標註資料(即:6萬

    Deep Learning 11_深度學習UFLDL教程:資料預處理斯坦福大學深度學習教程

    資料預處理是深度學習中非常重要的一步!如果說原始資料的獲得,是深度學習中最重要的一步,那麼獲得原始資料之後對它的預處理更是重要的一部分。 1.資料預處理的方法: ①資料歸一化: 簡單縮放:對資料的每一個維度的值進行重新調節,使其在 [0,1]或[ − 1,1] 的區間內 逐樣本均值消減:在每個

    Deep Learning 13_深度學習UFLDL教程:Independent Component Analysis_Exercise斯坦福大學深度學習教程

    前言 實驗環境:win7, matlab2015b,16G記憶體,2T機械硬碟 難點:本實驗難點在於執行時間比較長,跑一次都快一天了,並且我還要驗證各種代價函式的對錯,所以跑了很多次。 實驗基礎說明:      ①不同點:本節實驗中的基是標準正交的,也是線性獨立的,而Deep Learni

    Deep Learning 12_深度學習UFLDL教程:Sparse Coding_exercise斯坦福大學深度學習教程

    前言 實驗環境:win7, matlab2015b,16G記憶體,2T機械硬碟 本節實驗比較不好理解也不好做,我看很多人最後也沒得出好的結果,所以得花時間仔細理解才行。 實驗內容:Exercise:Sparse Coding。從10張512*512的已經白化後的灰度影象(即:Deep Learnin

    Deep Learning 6_深度學習UFLDL教程:Softmax Regression_Exercise斯坦福大學深度學習教程

    前言      練習內容:Exercise:Softmax Regression。完成MNIST手寫數字資料庫中手寫數字的識別,即:用6萬個已標註資料(即:6萬張28*28的影象塊(patches)),作訓練資料集,然後利用其訓練softmax分類器,再用1萬個已標註資料(即:1萬張28*28的影象塊(pa

    Deep Learning 7_深度學習UFLDL教程:Self-Taught Learning_Exercise斯坦福大學深度學習教程

    前言 理論知識:自我學習 練習環境:win7, matlab2015b,16G記憶體,2T硬碟       一是用29404個無標註資料unlabeledData(手寫數字資料庫MNIST Dataset中數字為5-9的資料)來訓練稀疏自動編碼器,得到其權重引數opttheta。這一步的目的是提取這

    Deep Learning 2_深度學習UFLDL教程:向量化程式設計斯坦福大學深度學習教程

    1前言     本節主要是讓人用向量化程式設計代替效率比較低的for迴圈。     在前一節的Sparse Autoencoder練習中已經實現了向量化程式設計,所以與前一節的區別只在於本節訓練集是用MINIST資料集,而上一節訓練集用的是從10張圖片中隨機選擇的8*8的10000張小圖塊。綜上,只需要在