1. 程式人生 > >【activeMQ】ActiveMQ 傳送接收訊息(含安裝執行測試)

【activeMQ】ActiveMQ 傳送接收訊息(含安裝執行測試)

準備工作

 下載

下載版本有Windows和Linux兩個版本,且都分為32位和64位。根據自己需要選擇下載。

 安裝

我這裡下載的為windows的32位版本(apache-activemq-5.8.0-bin.zip),下載後直接解壓到需要安裝的目錄或在直接解壓到當前目錄也可,解壓完安裝也完成。

解壓後目錄如上圖,裡面包含了示例和文件,及所有的jar包。

 

執行

進入到bin目錄(apache-activemq-5.8.0\bin),雙擊activemq.bat,就會執行,執行截圖如下:


此時表示ActiveMQ已經在運行了,當然正常生產環境下可以設定作為服務在後臺執行,並且隨系統啟動而啟動。

測試


預設使用者名稱和密碼都是admin,進入後則為主介面:


在這個介面上,我們可以管理佇列及其他的一些功能,為了下面的繼續,我們在這裡建立一個Queue和一個Topic。


點選目錄上的Queues進入建立Queue頁面,輸入Queue名稱,點選Create後下面就建立了G2Queue的queue佇列。


這裡也可以不用這樣手工建立,在傳送端指定了一個Queue或Topic名字後,會自動建立一個佇列,如上面的choice.queue和FirstQueue都是我測試程式時,程式裡面指定的Queue名稱,自動建立的。

同樣的方式建立一個Topic,如下:

需要引用的jar包

<dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-all</artifactId>
			<version>5.11.2</version>
		</dependency>

傳送訊息

import java.util.Random;
 
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
 
import org.apache.activemq.ActiveMQConnectionFactory;
 
public class SendMessage {
    private static final String url = "tcp://localhost:61616";
    private static final String QUEUE_NAME = "G2Queue";
 
    public void sendMessage() throwsJMSException {
       // JMS 客戶端到JMSProvider 的連線
       Connection connection = null;
       try {
           // 連線工廠,JMS 用它建立連線
           // 構造ConnectionFactory例項物件,此處採用ActiveMq的實現jar
           ConnectionFactory connectionFactory = newActiveMQConnectionFactory(url);
           connection = (Connection)connectionFactory.createConnection();
           // 啟動連線
           connection.start();
           //Session:傳送或接收訊息的執行緒
           // 獲取session
           Session session = (Session) connection.createSession(false,
                  Session.AUTO_ACKNOWLEDGE);
           // 訊息的目的地,訊息傳送到那個佇列
           Destination destination = session.createQueue(QUEUE_NAME);
           //MessageProducer:訊息傳送者(生產者)
           // 建立訊息傳送者
           MessageProducer producer =session.createProducer(destination);
           // 設定是否持久化
           //DeliveryMode.NON_PERSISTENT:不持久化
           //DeliveryMode.PERSISTENT:持久化
           producer.setDeliveryMode(DeliveryMode.PERSISTENT);
          
           String msg = "";
           int i = 0;
        do {
            msg = "第"+i + "次傳送的訊息:"+new Random();
                TextMessagemessage = session.createTextMessage(msg);
                Thread.sleep(1000);
                // 傳送訊息到目的地方
               producer.send(message);
                System.out.println("傳送訊息:" +msg);
                i++;
        } while (i<1000);
       } catch (Exception e) {
           e.printStackTrace();
       }
    }
 
    public static void main(String[] args) {
       SendMessage sndMsg = newSendMessage();
       try {
           sndMsg.sendMessage();
       } catch (Exception ex) {
           System.out.println(ex.toString());
       }
    }
}

執行結果如下:

接收訊息

package cn.g2room.mq.test;
 
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
 
import org.apache.activemq.ActiveMQConnectionFactory;
 
/**
 * 訊息接收類
 *
 * @createTime:Apr 7, 2013 5:11:11 PM
 * @author:<a href="mailto:[email protected]">迷蝶</a>
 * @version:0.1
 *@lastVersion: 0.1
 * @updateTime:
 *@updateAuthor: <a href="mailto:[email protected]">迷蝶</a>
 * @changesSum:
 *
 */
public class ReceiveMessage {
         privatestatic final String url = "tcp://localhost:61616";
         privatestatic final String QUEUE_NAME = "G2Queue";
 
         publicvoid receiveMessage() {
                   Connectionconnection = null;
                   try{
                            try{
                                     ConnectionFactoryconnectionFactory = new ActiveMQConnectionFactory(
                                                        url);
                                     connection= connectionFactory.createConnection();
                            }catch (Exception e) {
                                     System.out.println(e.toString());
                            }
                            connection.start();
                            Sessionsession = connection.createSession(false,
                                               Session.AUTO_ACKNOWLEDGE);
                            Destinationdestination = session.createQueue(QUEUE_NAME);
                            //訊息接收者,也就是消費者
                            MessageConsumerconsumer = session.createConsumer(destination);
                           
                            consumeMessagesAndClose(connection,session, consumer);
                   }catch (Exception e) {
                            System.out.println(e.toString());
                   }
         }
         /**
          * 接收和關閉訊息,如遇到訊息內容為close則,關閉連線
          *
          * @param connection   JMS 客戶端到JMSProvider 的連線
          * @param session                   傳送或接收訊息的執行緒
          * @param consumer              訊息接收物件
          * @throws JMSException
          * @auther <ahref="mailto:[email protected]">迷蝶</a>
          * Apr 8, 2013 10:31:55 AM
          */
         protectedvoid consumeMessagesAndClose(Connection connection,
                            Sessionsession, MessageConsumer consumer) throws JMSException {
                   do{
                            Messagemessage = consumer.receive(1000);
                            if("close".equals(message)){
                                     consumer.close();
                                     session.close();
                                     connection.close();
                            }
                            if(message != null) {
                                     onMessage(message);
                            }
                   }while (true);
                  
         }
 
         publicvoid onMessage(Message message) {
                   try{
                            if(message instanceof TextMessage) {
                                     TextMessagetxtMsg = (TextMessage) message;
                                     Stringmsg = txtMsg.getText();
                                     System.out.println("Received:" + msg);
                            }
                   }catch (Exception e) {
                            e.printStackTrace();
                   }
 
         }
 
         publicstatic void main(String args[]) {
                   ReceiveMessagerm = new ReceiveMessage();
                   rm.receiveMessage();
         }
}

執行結果如下:

 

至此結束

本文轉自:http://blog.csdn.net/leadergg/article/details/8771218


相關推薦

activeMQActiveMQ 傳送接收訊息安裝執行測試

準備工作  下載 下載版本有Windows和Linux兩個版本,且都分為32位和64位。根據自己需要選擇下載。  安裝 我這裡下載的為windows的32位版本(apache-activemq-5.8.0-bin.zip),下載後直接解壓到需要安裝的目錄或在直接解壓到

Pythonpython中分割字串多種分割符的方法

Date: 2018.6.9 1、 參考: 2、分割字串的三種方法 2.1 str.split() 利用字串函式split分割,分割後返回的是分割部分的字元列表,但是 每次只

Entity Framework6 with Oracle可實現code first

ocs driver 版本 nag model oracl 新的 vid req Oracle 已在2014年底提供對EF6的支持。以前只支持到EF5。EF6有很多有用的功能 值得升級。這裏介紹下如何支持Oracle 一.Oracle 對.net支持的一些基礎知識了解

AMQ之JMS Mesage structureJMS消息結構

api 兼容 ctu 標識 提供商 nbsp 連接 特定 ext Δ消息體:JMS API 定義了5種消息格式也叫消息類型,可以使用不同形式發送和接收數據,並可以兼容現有的消息格式 TextMessage,MapMessage,ByteMessage,StreamMessa

HDOJ3341Lost's revengeAC自動機,DP

res n) trie hdoj 字母 div 其中 func color 題意:給出一個n個模式串,一個目標串,問把目標串重新排位最多能產生多少個模式串,可以重疊且所有串只包含A C G T。 n<=10,len[i]<=10 len(s)<=40 C

C++最近公共祖先LCATarjan離線算法&& 洛谷P3379LCA模板

target sizeof add 例題 開始 實現 再看 根節點 strong 1.前言   首先我們介紹的算法是LCA問題中的離線算法-Tarjan算法,該算法采用DFS+並查集,再看此算法之前首先你得知道並查集(盡管我相信你如果知道這個的話肯定是知道並查集的),

BZOJ4566找相同字符後綴數組

cpp href online main void div fine 處理 eight 【BZOJ4566】找相同字符(後綴數組) 題面 BZOJ 題解 後綴數組的做法,應該不是很難想 首先看到兩個不同的串,當然是接在一起求\(SA,height\) 那麽,考慮一下暴力 在

HDOJ1874-暢通工程續最短路徑dijkstra

amp include using get dijk 找到 間距 距離 ace 1874-暢通工程續 http://acm.hdu.edu.cn/showproblem.php?pid=1874 題意:略。 思路:最短路dijkstra模板,不過要先要把題裏輸入的把兩點間距

題解 bzoj1076: [SCOI2008]獎勵關 裝壓+期望dp

狀態 span 方程 con can i+1 std tin log 題面戳我 Solution 並不會做,看了下題解大概了解了。期望這個東西好難搞啊qwq 我們定義\(dp[i][j]\)表示第\(i\)步,拿到寶物前的狀態為\(j\)。 正著來會有很多不合法的情況,剔

北京軟件開發工程師java分布式 10—30w/年

職位 ODB iba sql 郵箱 職責 pri 軟件 打電話 【崗位職責】: 具備3年以上Java開發經驗,有良好的代碼風格和編程習慣; 精通Java語言,熟悉JaveEE體系; 熟悉分布式系統的設計和應用,熟悉分布式、緩存、消息等機制;能對分布式常用技術進行合理應用,

BZOJ2178圓的面積並辛普森積分

lse double truct += ref bzoj2178 .com spa namespace 【BZOJ2178】圓的面積並(辛普森積分) 題面 BZOJ 權限題 題解 把\(f(x)\)設為\(x\)和所有圓交的線段的並的和。 然後直接上自適應辛普森積分。 我精

認證JNCIE SP備戰心得大俠唐在飛

secure junos notepad++ 分享 war otc 顯示器 tin 進行 年前去北京參加了jncie sp實驗考試 ,考試之行其實是很低調的,只有小範圍的朋友知道,沒人讓太多人知道。因為jncie sp 考試的難度與含金量是非常高的,很多人經常考試二次,甚至

ACMUVa 489 劊子手遊戲自頂向下

 【題目】 Hangman Judge是一個猜英文單字的小遊戲(在電子字典中常會看到),遊戲規則如下: 1、答案單字寫在紙上(每個字元一張紙),並且被蓋起來,玩家每次猜一個英文字元(letter)。 2、如果這個英文字元猜中(在答案的英文單字中有出現),被猜中的字元就被翻

BZOJ5019[SNOI2017]遺失的答案FWT,動態規劃

【BZOJ5019】[SNOI2017]遺失的答案(FWT,動態規劃) 題面 BZOJ 題解 發現\(10^8\)最多分解為不超過\(8\)個本質不同質數的乘積。 而\(gcd\)和\(lcm\)分別就是每個質因子的最大次冪和最小次冪的乘積。 那麼考慮一個狀壓\(dp\),設\(f[S1][S2]\)

BZOJ1413取石子游戲博弈,區間DP

題意:在研究過Nim遊戲及各種變種之後,Orez又發現了一種全新的取石子游戲,這個遊戲是這樣的: 有n堆石子,將這n堆石子擺成一排。遊戲由兩個人進行,兩人輪流操作,每次操作者都可以從最左或最右的一堆中取出若干顆石子, 可以將那一堆全部取掉,但不能不取,不能操作的人就輸了。 Orez問:對於任意給出一個初

Luogu1996約瑟夫問題模擬,解法彙總

problem n個人,每次數到m的人出隊 輸出出隊順序 n<=100 solution1 模擬:每次列舉第m個人出隊 O(n,m) #include<iostream> using namespace std;

LeetCode633. 平方數之和Sum of Square Numbers

【 英文練習 | 中文練習 】 題目描述: 給定一個非負整數 c ,你要判斷是否存在兩個整數 a 和 b,c 等於 a 和 b 的平方和。 示例: 輸入: 5 輸出: True 解釋: 1 * 1 + 2 * 2 = 5 解法一: 利用雙指標的思想,需要注意兩個坑點,一

5C++進階系列陣列和指標2

1、實驗 實驗1:3 x 3矩陣的轉置 #include<iostream> using namespace std; void swap(int &a, int &b) { int temp = a; a = b; b = temp;

ZCMU1437A Bug's Life種類並查集

題目連結 1437: A Bug's Life Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 113  Solved: 50 [Submit][Status][Web Board] Description Pr