1. 程式人生 > >ActiveMQ訊息中介軟體學習(一)

ActiveMQ訊息中介軟體學習(一)

同步通訊:客戶端向伺服器端發出請求,並一直等待伺服器端的響應。直到獲取到伺服器端返回的響應資訊,客戶端才能繼續執行。

MQ全稱為Message Queue, 訊息佇列(MQ)是一種應用程式對應用程式的通訊方法。應用程式通過讀寫出入佇列的訊息(針對應用程式的資料)來通訊,而無需專用連線來連結它們。訊息傳遞指的是程式之間通過在訊息中傳送資料進行通訊,而不是通過直接呼叫彼此來通訊,直接呼叫通常是用於諸如遠端過程呼叫的技術。

MOM訊息中介軟體:訊息傳送端將訊息傳送給訊息伺服器,訊息伺服器將訊息存放在若干個佇列中,在合適的時候再將訊息轉發給訊息接收端。在這種模式下,傳送訊息和接收訊息是一個非同步的過程,訊息傳送端和訊息接收端不一定同時執行,訊息傳送端在傳送完訊息後也無需繼續等待訊息接收端的響應資訊,而可以繼續做其它事情。

Java提供JMS規範,即定義了Java訪問訊息中介軟體的介面,它並沒有提供介面的實現。目前,有很多的JMS Provider提供了這些介面的實現,包括Apache的ActiveMQ、阿里巴巴的RocketMQ、Pivotal的RabbitMQ。

JMS中相關術語:

Provider:訊息生產者   

Customer:訊息消費者

Publish/Subscribe:訊息的釋出訂閱模式

Queue:訊息對列

Topic:訊息主題

ConnectionFactory:連線工廠,用於建立連線

Connection:訊息生產者或消費者到JMS Provider的連線

Destination:訊息的目的地

Session:會話,一個傳送或接收訊息的執行緒

訊息格式定義:

StreamMessage:資料流

MapMessage:名稱-值對

TextMessage:字串物件

ObjectMessage:序列化的Java物件

BytesMessage:位元組資料流

在ActiveMQ的官網下載最新版本的軟體包


ActiveMQ的配置檔案、jetty容器的配置檔案


ActiveMQ軟體包中一個比較全的jar包


webapps包含可以部署到jetty中的admin管控臺程式


在bin目錄下通過bat檔案啟動ActiveMQ


檢視jetty.xml中的埠號


啟動完成後,使用瀏覽器訪問



訊息生產者Producer

package com.cb;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Producer {
	public static void main(String[] args) throws Exception{
		//1.建立ConnectionFactory物件
		ConnectionFactory connectionFactory=new ActiveMQConnectionFactory(
				ActiveMQConnectionFactory.DEFAULT_USER,
				ActiveMQConnectionFactory.DEFAULT_PASSWORD, 
				"tcp://localhost:61616");
		//2.建立一個Connection並開啟
		Connection connection=connectionFactory.createConnection();
		connection.start();
		//3.建立Session會話,用來接收訊息,通過引數可以設定:是否啟用事務、訊息簽收模式
		Session session=connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
		//4.建立Destination物件。在點對點模式中,該物件被稱為Queue;在釋出訂閱模式中,該物件被稱為Topic
		Destination destination=session.createQueue("queue1");
		//5.建立訊息的生產者
		MessageProducer messageProducer=session.createProducer(destination);
		//6.設定生產者的訊息持久化與非持久化特性
		messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
		//7.選擇需要的JMS訊息格式,建立併發送訊息,此處選擇的是TextMessage字串物件
		TextMessage textMessage=session.createTextMessage();
		textMessage.setText("生產者"+"activemq訊息測試");
		messageProducer.send(textMessage);
		//8.釋放Connection
		if(null!=connection){
			connection.close();
		}

	}
}

執行上述程式碼,檢視控制檯


點選佇列名稱,檢視詳情


此時,生產者傳送訊息到訊息中介軟體ActiveMQ中了。

訊息消費者Consumer

package com.cb;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Consumer {
	public static void main(String[] args) throws Exception{
		//1.建立ConnectionFactory物件
		ConnectionFactory connectionFactory=new ActiveMQConnectionFactory(
				ActiveMQConnectionFactory.DEFAULT_USER,
				ActiveMQConnectionFactory.DEFAULT_PASSWORD, 
				"tcp://localhost:61616");
		//2.建立一個Connection並開啟
		Connection connection=connectionFactory.createConnection();
		connection.start();
		//3.建立Session會話,用來接收訊息,通過引數可以設定:是否啟用事務、訊息簽收模式
		Session session=connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
		//4.建立Destination物件。在點對點模式中,該物件被稱為Queue;在釋出訂閱模式中,該物件被稱為Topic
		Destination destination=session.createQueue("queue1");
		//5.建立訊息的消費者
		MessageConsumer messageConsumer=session.createConsumer(destination);
		//6.消費者從訊息中介軟體的Queue獲取訊息
		while(true){
			TextMessage textMessage=(TextMessage) messageConsumer.receive();
			if(null==textMessage){
				break;
			}
			System.out.println("消費者接收到的內容:"+textMessage.getText());
		}
		//7.釋放Connection
		if(null!=connection){
			connection.close();
		}

	}
}

執行上面消費訊息的程式碼,並檢視控制檯


此時,點選queue1檢視佇列中訊息,發現為空,因為訊息已經被消費了


在Eclipse的Console中結果如下圖:


在activemq.xml中可以設定安全驗證,只有驗證通過的使用者才可以向ActiveMQ訊息中介軟體中傳送、獲取訊息。


<plugins>
			<simpleAuthenticationPlugin>
				<users>
					<authenticationUser username="cb" password="123456" groups="users,admins"/>
				</users>
			</simpleAuthenticationPlugin>
		</plugins>

同時修改Producer、Customer第1步中的使用者名稱和密碼


相關推薦

ActiveMQ訊息中介軟體學習

同步通訊:客戶端向伺服器端發出請求,並一直等待伺服器端的響應。直到獲取到伺服器端返回的響應資訊,客戶端才能繼續執行。 MQ全稱為Message Queue, 訊息佇列(MQ)是一種應用程式對應用程式的通訊方法。應用程式通過讀寫出入佇列的訊息(針對應用程式的資料)來通訊,而

訊息中介軟體MQ概念及常識

1.概念和用途:Message Queue顧名思義就是訊息佇列。打個比方去快餐店點餐,每個人點餐可能只要10s,但如果三個人同時向服務員點餐,服務員就可能會亂了,三個顧客還可能會吵起來,這件事就沒法30s內解決,那麼很簡單,排隊點餐就好辦了。所以MQ最核心的功能

訊息中介軟體——RocketMQ 環境搭建完整版

每章一點正能量:自我控制是最強者的本能。——蕭伯納 前言 最近在學習訊息中介軟體——RocketMQ,打算把這個學習過程記錄下來。此章主要介紹環境搭建。此次主要是單機搭建(條件有限),包括在Windows、Linux環境下的搭建,以及console監控平臺搭建,最後加一demo驗證一下。 環境準備

訊息中介軟體——RabbitMQWindows/Linux環境搭建完整版

前言 最近在學習訊息中介軟體——RabbitMQ,打算把這個學習過程記錄下來。此章主要介紹環境搭建。此次主要是單機搭建(條件有限),包括在Windows、Linux環境下的搭建,以及RabbitMQ的監控平臺搭建。 環境準備 在搭建RabbitMQ之前,請先確保如下環境已經搭建完畢 Java環境(我

常見Nginx的中介軟體架構

#一、靜態資源Web服務 #檔案讀取 Syntax: sendfile on|off; Default : sendfile off; Context:http,server,location,if in location #tcp_nopush配置語法 #作用:sendfile開啟的情況下

訊息中介軟體MQ模式、應用場景、常用協議

1.訊息中介軟體模式分類 1.1 點對點 1.2釋出/訂閱 2訊息中介軟體應用場景 2.1非同步通訊 有些業務不想也不需要立即處理訊息。訊息佇列提供了非同步處理機制,允許使用者把一個訊息放入佇列,但並不立即處理它。想向佇列中放入多少訊息就放多少,然後在需要的

訊息中介軟體MQJMS常識及簡單案例

1JMS概念 JMS即Java訊息服務(Java Message Service)應用程式介面,是一個Java平臺中關於面向訊息中介軟體(MOM)的API,用於在兩個應用程式之間,或分散式系統中傳送訊息,進行非同步通訊。Java訊息服務是一個與具體平臺無關的AP

訊息中介軟體Rabbitmq-使用詳解

https://blog.csdn.net/Dante_003/article/details/79377908Rabbitmq 是基於amqp(高階訊息佇列協議)實現的佇列技術,在他之上可以完成多種型別的訊息轉發模型。 下面列舉一些常用的訊息轉發場景,在rabbitmq中是

訊息中介軟體——RabbitMQ各大主流訊息中介軟體綜合對比介紹!

前言 訊息佇列已經逐漸成為企業IT系統內部通訊的核心手段。它具有低耦合、可靠投遞、廣播、流量控制、最終一致性等一系列功能,成為非同步RPC的主要手段之一。當今市面上有很多主流的訊息中介軟體,如老牌的ActiveMQ、RabbitMQ,炙手可熱的Kafka,阿里巴巴自主開發RocketMQ等。今天主要來

訊息中介軟體——RabbitMQ理解RabbitMQ核心概念和AMQP協議!

前言 本章學習,我們可以瞭解到以下知識點: 網際網路大廠為什麼選擇RabbitMQ? RabbiMQ的高效能之道是如何做到的? 什麼是AMQP高階協議? AMQP核心概念是什麼? RabbitMQ整體架構模型是什麼樣子的? RabbitMQ訊息是如何流轉的? 1. 初識RabbitMQ Rabbi

訊息中介軟體——RabbitMQ命令列與管控臺的基本操作!

前言 在前面的文章中我們介紹過RabbitMQ的搭建:RabbitMQ的安裝過以及各大主流訊息中介軟體的對比:,本章就主要來介紹下我們之前安裝的管控臺是如何使用以及如何通過命令列進行操作。 1. 命令列操作 1.1 基礎服務的命令操作 rabbitmqctl stop_app:關閉應用 rabbitm

訊息中介軟體——RabbitMQ快速入門生產者與消費者,SpringBoot整合RabbitMQ!

前言 本章我們來一次快速入門RabbitMQ——生產者與消費者。需要構建一個生產端與消費端的模型。什麼意思呢?我們的生產者傳送一條訊息,投遞到RabbitMQ叢集也就是Broker。 我們的消費端進行監聽RabbitMQ,當發現佇列中有訊息後,就進行消費。 1. 環境準備 本次整合主要採用Spring

訊息中介軟體——RabbitMQ理解Exchange交換機核心概念!

前言 來了解RabbitMQ一個重要的概念:Exchange交換機 1. Exchange概念 Exchange:接收訊息,並根據路由鍵轉發訊息所繫結的佇列。 藍色框:客戶端傳送訊息至交換機,通過路由鍵路由至指定的佇列。 黃色框:交換機和佇列通過路由鍵有一個繫結的關係。 綠色框:消費端通過監聽

訊息中介軟體——RabbitMQ高階特性全在這裡!

前言 前面我們介紹了RabbitMQ的安裝、各大訊息中介軟體的對比、AMQP核心概念、管控臺的使用、快速入門RabbitMQ。本章將介紹RabbitMQ的高階特性。分兩篇(上/下)進行介紹。 訊息如何保障100%的投遞成功? 冪等性概念詳解 在海量訂單產生的業務高峰期,如何避免訊息的重複消費的問題?

訊息中介軟體——RabbitMQ高階特性全在這裡!

前言 上一篇訊息中介軟體——RabbitMQ(七)高階特性全在這裡!(上)中我們介紹了訊息如何保障100%的投遞成功?,冪等性概念詳解,在海量訂單產生的業務高峰期,如何避免訊息的重複消費的問題?,Confirm確認訊息、Return返回訊息。這篇我們來介紹下下面內容。 自定義消費者 訊息的限流(防止

訊息中介軟體--RabbitMQ學習

Activemq介紹 Activemq是 Apache出品,最流行的能力強勁的開源訊息匯流排,並且它個完全支援MS規範的訊息中介軟體。 其豐富的AP、多種叢集構建模式使得他成為業界老牌訊息中介軟體,在中小型企業中應用廣泛。 MQ衡量指標:服務效能、資料儲存、叢集架構

activemq訊息中介軟體--JMS概述1

1 JMS概述 目前現在很多的RPC中介軟體技術都有如下問題: (1)同步通訊,客戶端發出呼叫請求,必須等待服務端處理完成以後返回結果才能繼續執行。 (2)客戶和服務物件的生命週期緊密耦合,客戶程序和服務程序都必須正常進行,如果由於服務物件的崩潰和網路故障導致客戶請求不可達,客戶收到

訊息中介軟體學習總結1——RocketMQ之專訪RocketMQ聯合創始人:專案思路、技術細節和未來規劃

編者按 這些年開源氛圍越來越好,各大IT公司都紛紛將一些自研程式碼開源出來。2012年,阿里巴巴開源其自研的第三代分散式訊息中介軟體——RocketMQ。經過幾年的技術打磨,阿里稱基於RocketMQ技術,目前雙十一當天訊息容量可達到萬億級。 2016年11月,阿里將Ro

訊息中介軟體學習總結3——RocketMQ之十分鐘入門RocketMQ

本文首先引出訊息中介軟體通常需要解決哪些問題,在解決這些問題當中會遇到什麼困難,Apache RocketMQ作為阿里開源的一款高效能、高吞吐量的分散式訊息中介軟體否可以解決,規範中如何定義這些問題。然後本文將介紹RocketMQ的架構設計,以期讓讀者快速瞭解RocketMQ

訊息中介軟體學習總結6——RocketMQ之RocketMQ大資料暢想

剛剛過去的雙十一,阿里自主研發的訊息中介軟體RocketMQ,充分展現了它的低延遲特性,大部分訊息請求落在2ms內,慢請求也都落在20ms內,這無疑給追求快速響應的線上交易系統(OLTP)帶去了福音。 也是在今年11月份,RocketMQ進入Apache孵化。這款最初設計來為