1. 程式人生 > >activeMQ實踐(二)--簡單應用例項

activeMQ實踐(二)--簡單應用例項

上一章我們講解了簡單的activemq的定義和使用場景,這一節我們來看一下例項。
首先在官網下載相應的安裝包,如果是windows系統,直接下載安裝,解壓執行對應位數的activemq.bat命令就可以了,然後可以登入http://localhost:8161/檢視activemq的控制檯實時檢視訊息的去向和連線,帳號密碼都是admin。
首先建立一個簡單的maven專案,你用eclipse和idea都不影響。
新增依賴

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

先看佇列模式:
建立一個生產者AppProducer

package cn.com.queue;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

import
javax.jms.*; /** * ${佇列模式的生產者} * * @author lightTrace * @create 2017-11-26 18:30 **/ public class AppProducer { private static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;//預設接收發送訊息地址,大家可酌情修改 private final static String queueName = "queue-test"; public static void main
(String[] args) throws JMSException { //1.建立我們的連線工廠 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL); //2.建立連線 Connection connection = connectionFactory.createConnection(); //3.啟動連線 connection.start(); //4.建立回話 Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); //5.指定一個目的地 Destination destination = session.createQueue(queueName); //6.建立一個生產者 MessageProducer messageProducer = session.createProducer(destination); for(int i=0;i<100;i++){ //7.建立訊息 TextMessage textMessage = session.createTextMessage("test"+i); //8.釋出訊息 messageProducer.send(textMessage); System.out.println("傳送訊息"+textMessage.getText()); } //9.關閉連線 session.close(); connection.close(); } }

然後main方法執行檢視後臺QUEUES:
這裡寫圖片描述
發現有一百個訊息建立,name就是程式碼中的queueName,用於指定目的地,下面的消費者就從這個目的地就收訊息
消費者:

package cn.com.queue;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

/**
 * ${DESCRIPTION}
 * @author lightTrace
 * @create 2017-11-26 19:07
 **/
public class AppCosumer {

    private static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;
    private final static String queueName = "queue-test";
    public static void main(String[] args) throws JMSException {
        //1.建立我們的連線工廠
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL);
        //2.建立連線
        Connection connection = connectionFactory.createConnection();
        //3.啟動連線
        connection.start();
        //4.建立回話
        Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
        //5.指定一個目的地
        Destination destination = session.createQueue(queueName);
        //6.建立一個消費者
        MessageConsumer messageConsumer = session.createConsumer(destination);
        //7.建立一個監聽器
        messageConsumer.setMessageListener(new MessageListener() {
            public void onMessage(Message message) {
                TextMessage textMessage = (TextMessage) message;
                try {
                    System.out.println("接收訊息"+textMessage.getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });

    }
}

執行消費者之後:
這裡寫圖片描述
大家可以看到控制檯的變化,如果你先開啟兩個消費者,再用生產者生產訊息會發現兩個消費者會交替消費,一條資訊只會被一個消費者消費

下面再看下主題模式:
主題模式只需要在佇列模式的基礎上修改少部分即可,首先生產者:

package cn.com.topic;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * ${DESCRIPTION}
 *
 * @author lightTrace
 * @create 2017-11-26 18:30
 **/
public class AppProducer {

    private static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;
    private final static String topicName = "topic-test";//換一個名字
    public static void main(String[] args) throws JMSException {
        //1.建立我們的連線工廠
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL);
        //2.建立連線
        Connection connection = connectionFactory.createConnection();
        //3.啟動連線
        connection.start();
        //4.建立回話
        Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
        //5.指定一個目的地,這裡不同
        Destination destination = session.createTopic(topicName);
        //6.建立一個生產者
        MessageProducer messageProducer = session.createProducer(destination);
        for(int i=0;i<100;i++){
            //7.建立訊息
            TextMessage textMessage = session.createTextMessage("test"+i);
            //8.釋出訊息
            messageProducer.send(textMessage);
            System.out.println("傳送訊息"+textMessage.getText());
        }
        //9.關閉連線
        session.close();
        connection.close();
    }
}

執行:
這裡寫圖片描述

然後消費者:

package cn.com.topic;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * ${DESCRIPTION}
 * @author lightTrace
 * @create 2017-11-26 19:07
 **/
public class AppCosumer {

    private static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;
    private final static String topicName = "topic-test";//名字對應上,指向同一個目的地
    public static void main(String[] args) throws JMSException {
        //1.建立我們的連線工廠
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL);
        //2.建立連線
        Connection connection = connectionFactory.createConnection();
        //3.啟動連線
        connection.start();
        //4.建立回話
        Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
        //5.指定一個目的地,這裡不同
        Destination destination = session.createTopic(topicName);
        //6.建立一個消費者
        MessageConsumer messageConsumer = session.createConsumer(destination);
        //7.建立一個監聽器
        messageConsumer.setMessageListener(new MessageListener() {
            public void onMessage(Message message) {
                TextMessage textMessage = (TextMessage) message;
                try {
                    System.out.println("接收訊息"+textMessage.getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

執行,發現控制檯沒有變化和反應,這是因為主題模式消費者需要先訂閱才能消費資訊,所以我們要先啟動消費者,再啟動生產者,會看到相應的資訊被消費。如果我們同時啟動兩個消費者,再用生產者生產訊息,發現兩個消費者同時消費所有的資訊,這兩點就是和佇列模式不同的地方,那麼大家思考下他們分別的應用場景?
最後附上一張JMS編碼介面之間的關係,大家聯絡上面的例子看下。
這裡寫圖片描述

相關推薦

activeMQ實踐--簡單應用例項

上一章我們講解了簡單的activemq的定義和使用場景,這一節我們來看一下例項。 首先在官網下載相應的安裝包,如果是windows系統,直接下載安裝,解壓執行對應位數的activemq.bat命令就可

mllib實踐之LinearRegression實踐DataFrame方式,普通標籤格式轉DataFrame整合網際網路上多個例項

package mllib; import org.apache.spark.{ SparkConf, SparkContext } import org.apache.spark.ml.linalg.Vectors import org.apache.spark.mllib.regress

卷積神經網路應用簡單卷積網路實現MNIST數字識別

卷積神經網路簡單實現MNIST數字識別 本篇的主要內容: 一個兩層卷積層的簡單卷積網路的TensorFlow的實現 網路的結構 在這張圖裡,我把每一層的輸入以及輸出的結構都標註了,結合閱讀程式碼食用效果更佳。 具體程式碼 具體的內容,都寫在相應位置的註釋中

深度學習在目標檢測中的應用及其tensorflowAPI實踐

這系列文章的內容目錄如下: 目標檢測的任務 深度學習在目標檢測中的應用 RCNN fast RCNN faster RCNN RFCN yolo yolo V2 SSD tensorflow目標檢測API的使用 在第一篇裡說完了RCNN和fast RC

分散式定時任務Elastic-Job框架在SpringBoot工程中的應用實踐

文章摘要:在生產環境中部署Elastic-Job集群后,那麼如何來運維監控線上跑著的定時任務呢? 如果在生產環境的大規模伺服器叢集上部署了整合Elastic-Job的業務工程,而沒有相應的運維監控工具可以來監控定時任務執行狀態和動態修改定時任務執行時間,修改相應的配置還得手動

Asp.Net Core WebAPI入門整理簡單示例

序列 open exc tor pda template ssa net found 一、Core WebAPI中的序列化 使用的是Newtonsoft.Json,自定義全局配置處理: // This method gets called by the runtime.

Mongodb基礎實踐

數據庫查詢 表達式 where 技術 文章 在前面的文章裏面主要介紹了MongoDB的文檔,集合,數據庫等操作和對文檔的增、刪、改相關知識,接下來會總結一點有關查詢的相關知識。 在MySQL中,我們知道數據查詢是優化的主要內容,讀寫分離等技術都是可以用來處理數據庫查詢優化的,足以見數

MVC項目實踐——需求分析

用例 分析 strong span 詳細 現在 同時 喜歡 發揮 需求: 作為一名觀眾,我希望知道詳細的比分變化和得分信息,以便於了解比賽走向和隊員的精彩得分。 用例故事: 裏約奧運女排決賽進行中... Ht7:現在比分多少了? LP:2:1,中國隊領先。 Ht7:那小比

JVM高級特性與實踐:對象存活判定算法引用 與 回收

添加 引用計數器 程序計數器 正文 bmc 進入 block 結構 內存 關於垃圾回收器GC(Garbage Collection),多數人意味它是Java語言的伴生產物。事實上,GC的歷史遠比Java悠遠,於1960年誕生在MIT的Lisp是第一門真正使用內存動態分配和垃

Wireshark使用介紹應用Wireshark觀察基本網絡協議

使用 額外 傳輸過程 直接 nal http協議 ges log 傳輸 TCP: TCP/IP通過三次握手建立一個連接。這一過程中的三種報文是:SYN,SYN/ACK,ACK。 第一步是找到PC發送到網絡服務器的第一個SYN報文,這標識了TCP三次握手的開始。

算法 簡單選擇排序

簡單選擇排序從左到右依次選取一個值作為默認最大值,依次與其它值比較,如果有值比該值大,那最大值指針改指向該值,一輪比較完成後,如果最大值指針沒有變化,則從下一個值繼續下一輪比較,如果指針有變動,則最新指針位置的數值與初始指針位置數值交換位置。代碼如下:lst1 = [ [1, 8, 9, 5, 6,

前端工程化思考與實踐

run test 代碼 -m link 本地 生成頁面 函數 說我 4. 前端工程化開發實踐 由於Nodejs 、npm的環境搭建往上很多,這裏就不過多介紹它們了。 這裏我們將更多介紹FIS3、RequireJS 、r.js。 4.1 模塊化開發:

Python3簡單的輸入輸出及內置函數查看

多少 工作 log 一起學 朋友 有關 pri www 再見 工作之余和女朋友一起學Python3,代碼都是她敲的,有點辣眼睛,僅做參考。 1.題目:輸入“姓名”,輸出“你好,姓名” 有關安裝和打開Python shell的步驟,參考這裏:http://www.jb51.n

springcloud實踐之api網關:zuul

actor 控制 patch isp where url 大文件上傳 html base zuul是什麽? front door. API Gateway.Zuul is a JVM based router and server side load balancer b

設計模式學習筆記--簡單工廠模式和工廠模式

bsp bubuko rac oid nds gen body () pri 老生長談的兩個設計模式了,這裏把這兩個設計模式對比著來總結一下。 什麽是簡單工廠模式? 簡單工廠模式:根據傳入工廠類的參數動態決定要創建哪一個產品類的實例。 UML圖如下(以實現一個計算器為例):

spring-data-jpa快速入門——簡單查詢

ref spa data mail domain event cif open 寫實 一、方法名解析   1.引言     回顧HelloWorld項目中的dao接口 public interface GirlRepository extends JpaRepos

sqlalchemy簡單的連接示例

修改 條件查詢 mode mit creat utf-8 orm 除開 生成 # -*- coding: utf-8 -*- import sqlalchemy from sqlalchemy import create_engine from sqlalchem

KVM虛擬化實踐

KVM 虛擬化 實踐 KVM的日常應用管理 1>虛擬機查看#查看當前正在運行中的虛擬機#查看當前物理機的所有虛擬機//也可以在物理機進程上查看 2>虛擬機的開關關閉虛擬機[root@node1 ~]# virsh shutdown CentOS-7.4-x86_64(主機名)關閉虛擬機

Spring Boot 最佳實踐集成Jsp與生產環境部署

內容 tro conf 相關 安裝 packaging exc 詳細介紹 更新 一、簡介 提起Java不得不說的一個開發場景就是Web開發,也是Java最熱門的開發場景之一,說到Web開發繞不開的一個技術就是JSP,因為目前市面上仍有很多的公司在使用JSP,所以本文就來介紹

Git工程開發實踐——Git內部實現機制

trie 一段 時間戳 git分支 oss \n 保存 配置 -a Git工程開發實踐(二)——Git內部實現機制 一、Git倉庫內部實現簡介 Git本質上是一個內容尋址(content-addressable)的文件系統,根據文件內容的SHA-1哈希值來定位文件。Git核