關(guān)于我們

質量為(wèi)本、客戶為(wèi)根、勇于拼搏、務(wù)實創新(xīn)

< 返回新(xīn)聞公共列表

Docker中如(rú)何搭建ActiveMQ消息服務(wù)

發布時(shí)間(jiān):2021-04-01 16:44:14

本文是關(guān)于如(rú)何在Docker中構建主動MQ消息服務(wù)的。微子(zǐ)網絡覺得很實用,就(jiù)分(fēn)享給大家參考,跟着微子(zǐ)網絡看了(le)看。

前言

ActiveMQ是Apache生(shēng)産的最流行、最強大的開源消息總線。主動MQ是一(yī)個(gè)JMS提供者實現(xiàn),它完全支持JMS1.1和J2EE 1.4規範。盡管JMS規範已經發布了(le)很長時(shí)間(jiān),但(dàn)它在今天的J2EE應用程序中仍然扮演着特殊的角色。

在生(shēng)産項目中,分(fēn)布式系統之間(jiān)的通信通常需要消息中間(jiān)件。它具有低(dī)耦合、可靠傳遞、廣播、流量控制、最終一(yī)緻性等一(yī)系列功能(néng)。本文主要介紹了(le)ActiveMQ的相關(guān)概念和安裝說(shuō)明,然後重點介紹了(le)spike消息隊列的SpringBoot集成實現(xiàn)。

概念

JMS消息模式

點對點或隊列模式

它包含三個(gè)角色:消息隊列、發送者和接收者。每個(gè)消息都被發送到一(yī)個(gè)特定的隊列,接收者從隊列中獲取消息。隊列保存消息,直到它們被消耗或超時(shí)。

每個(gè)消息隻有一(yī)個(gè)消費者,也(yě)就(jiù)是說(shuō),一(yī)旦被消費,消息就(jiù)不再在消息隊列中

發送方和接收方之間(jiān)不存在時(shí)間(jiān)依賴性,這(zhè)意味着發送方發送消息後,無論接收方是否在運行,都不會影響消息被發送到隊列中。

接收方需要在成功接收消息後成功回複隊列

Pub/Sub 發布/訂閱模式

有三個(gè)角色:主題、發布者和訂閱者。多個(gè)發布者向主題發送消息,系統将這(zhè)些(xiē)消息傳遞給多個(gè)訂閱者。

每個(gè)消息可以有多個(gè)消費者

出版商(shāng)和訂戶之間(jiān)存在時(shí)間(jiān)依賴性。對于主題訂閱者,它必須先創建一(yī)個(gè)訂閱者,然後才能(néng)使用發布者的消息。

為(wèi)了(le)使用消息,訂閱者必須保持運行。

為(wèi)了(le)減輕這(zhè)種嚴格的時(shí)間(jiān)依賴性,JMS允許訂閱者創建持久的訂閱。這(zhè)樣,即使訂閱者沒有被激活(運行),它仍然可以接收到發布者的消息。

如(rú)果您想發送的消息可以不經過任何處理(lǐ),或者隻由一(yī)個(gè)信使處理(lǐ),或者由多個(gè)消費者處理(lǐ),那麽可以采用發布/訂閱模式。

JMS消息基本組件

ConnectionFactory

有兩種不同的jms消息模型,queueConnectionfactory和TopicConnectionFactory,用于創建連接對象。您可以通過JNDI找到連接工廠對象。

Destination

目的地是指消息生(shēng)産者的消息目的地或消息消費者的消息源。對于消息生(shēng)成器(qì),其目标是隊列或主題;對于消息使用者來(lái)說(shuō),它的目标也(yě)是一(yī)個(gè)隊列或主題(即消息源)。

因此,目标實際上(shàng)是兩種類型的對象:隊列和主題。目的地可以通過JNDI找到。

Connection

連接表示在客戶端和JMS系統之間(jiān)建立的鏈接(包裝TCP/IP套接字)。一(yī)個(gè)連接可以生(shēng)成一(yī)個(gè)或多個(gè)會話(huà)。與連接工廠一(yī)樣,有兩種類型的連接:排隊連接和主題連接。

Session

會話(huà)是操縱消息的接口。您可以創建生(shēng)産者、消費者、消息等。通過會話(huà)。會話(huà)提供交易功能(néng)。當您需要使用會話(huà)發送/接收多個(gè)消息時(shí),您可以将這(zhè)些(xiē)發送/接收操作(zuò)放(fàng)入一(yī)個(gè)事(shì)務(wù)中。同樣,它可以分(fēn)為(wèi)排隊會話(huà)和主題會話(huà)。

消息的生(shēng)産者

消息生(shēng)成器(qì)由會話(huà)創建,用于向目标發送消息。同樣,有兩種類型的消息生(shēng)産者:隊列發送者和主題發布者。您可以調用消息生(shēng)成器(qì)的方法(發送或發布方法)來(lái)發送消息。

消息消費者

消息使用者由會話(huà)創建,用于接收發送到目标的消息。有兩種類型:QueueReceiver和TopicSubscriber。它們可以分(fēn)别通過sessio

n的createReceiver(Queue)或createSubscriber(Topic)來(lái)創建。當然,也(yě)可以session的creatDurableSubscriber方法來(lái)創建持久化(huà)的訂閱者。

MessageListener

消息監聽(tīng)器(qì)。如(rú)果注冊了(le)消息監聽(tīng)器(qì),一(yī)旦消息到達,将自動調用監聽(tīng)器(qì)的onMessage方法。EJB中的MDB(Message-Driven Bean)就(jiù)是一(yī)種MessageListener。

Transport傳輸方式

ActiveMQ目前支持的Transport有:VM Transport、TCP Transport、NIO Transport、SSL Transport、Peer Transport、UDP Transport、Multicast Transport、HTTP and HTTPS Transport、WebSockets Transport、Failover Transport、Fanout Transport、Discovery Transport、ZeroConf Transport等。

  • VM Transport:允許客戶端和Broker直接在VM内部通信,采用的連接不是Socket連接,而是直接的方法調用,從而避免了(le)網絡傳輸的開銷。應用場(chǎng)景也(yě)僅限于Broker和客戶端在同一(yī)JVM環境下(xià)。

  • TCP Transport:客戶端通過TCP Socket連接到遠(yuǎn)程Broker。配置語法:

  • tcp://hostname:port?transportOptions

  • HTTP and HTTPS Transport:允許客戶端使用REST或者Ajax的方式進行連接。這(zhè)意味着可以直接使用Javascript向ActiveMQ發送消息。

  • WebSockets Transport:允許客戶端通過HTML5标準的WebSockets方式連接到Broker。

  • Failover Transport:青龍系統MQ采用的就(jiù)是這(zhè)種連接方式。這(zhè)種方式具備自動重新(xīn)連接的機制,工作(zuò)在其他Transport的上(shàng)層,用于建立可靠的傳輸。允許配置任意多個(gè)的URI,該機制将會自動選擇其中的一(yī)個(gè)URI來(lái)嘗試連接。配置語法:

  • failover:(tcp://localhost:61616,tcp://localhost:61617,.....)?transportOptions

  • Fanout Transport:主要适用于生(shēng)産消息發向多個(gè)代理(lǐ)。如(rú)果多個(gè)代理(lǐ)出現(xiàn)環路(lù),可能(néng)造成消費者接收重複的消息。所以,使用該協議(yì)時(shí),最好(hǎo)(hǎo)将消息發送給多個(gè)不相連接的代理(lǐ)。

Persistence持久化(huà)存儲

AMQ Message Store

ActiveMQ 5.0 的缺省持久化(huà)存儲方式。

Kaha Persistence

這(zhè)是一(yī)個(gè)專門針對消息持久化(huà)的解決方案。它對典型的消息使用模式進行了(le)優化(huà)。

JDBC Persistence

目前支持的數據庫有:Apache Derby, Axion, DB2, HSQL, Informix, MaxDB, MySQL, Oracle, Postgresql, SQLServer, Sybase。

Disable Persistence

不應用持久化(huà)存儲。

集群方案(Master / Slave)

Pure Master Slave

  • 無單點故障;

  • 不需要依賴共享文件系統或是共享數據庫,使用 KahaDB的方式持久化(huà)存儲;

  • 一(yī)個(gè)Master隻能(néng)帶一(yī)個(gè)Slave;

  • Master工作(zuò)期間(jiān),會将消息狀況自動同步到Slave;

  • Master一(yī)旦崩潰,Slave自動接替其工作(zuò),已發送并尚未消費的消息繼續有效;

  • Slave接手後,必須停止Slave才能(néng)重啓先前的Master;

Shared File System Master Slave

JDBC Master Slave

  • 配置上(shàng),不存在Master和Slave的區分(fēn),多個(gè)共享數據源的Broker構成JDBC Master Slave;

  • 首先搶到資源(數據庫鎖)的Broker成為(wèi)Master,其他Broker定期嘗試搶占資源;

  • 一(yī)旦Master崩潰,其他Broker搶占資源,最終隻有一(yī)台搶到,立刻成為(wèi)Master,之前的Master即便重啓成功,也(yě)隻能(néng)作(zuò)為(wèi)Slave等待;

安裝說(shuō)明

這(zhè)裏使用Docker安裝,查詢Docker鏡像:

dockersearchactivemq

下(xià)載Docker鏡像:

dockerpullwebcenter/activemq

創建&運行ActiveMQ容器(qì):

dockerrun-d--namemyactivemq-p61617:61616-p8162:8161webcenter/activemq

61616是 activemq 的容器(qì)使用端口(映射為(wèi)61617),8161是 web 頁面管理(lǐ)端口(對外映射為(wèi)8162)

查看創建的容器(qì),如(rú)果存在說(shuō)明安裝成功:

dockerps

查看WEB管理(lǐ)頁面:

浏覽器(qì)輸入 http://ip :8162 點擊Manage ActiveMQ broker使用默認賬号/密碼:admin/admin進入查看。

Docker中如(rú)何搭建ActiveMQ消息服務(wù)

Docker中如(rú)何搭建ActiveMQ消息服務(wù)

配置訪問密碼

進入Docker容器(qì):

dockerexec-itmyactivemq/bin/bash

控制台界面設置用戶名和密碼:

#位于根目錄conf目錄下(xià)
vijetty-realm.properties
#修改密碼
#username:password[,rolename...]
admin:admin,admin

配置連接密碼

編輯activemq.xml文件,放(fàng)置到 shutdownHooks 下(xià)方即可。

<!--添加訪問ActiveMQ的賬号密碼-->
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUserusername="${activemq.username}"password="${activemq.password}"groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
</plugins>

修改conf中credentials.properties文件進行密碼設置:

activemq.username=admin
activemq.password=123456
guest.password=123456

注意事(shì)項

如(rú)果是雲服務(wù)器(qì),記得開放(fàng)相關(guān)端口(61617/8160)

感謝各位的閱讀!關(guān)于“Docker中如(rú)何搭建ActiveMQ消息服務(wù)”這(zhè)篇文章就(jiù)分(fēn)享到這(zhè)裏了(le),希望以上(shàng)内容可以對大家有一(yī)定的幫助,讓大家可以學到更多知識,如(rú)果覺得文章不錯,可以把它分(fēn)享出去讓更多的人(rén)看到吧(ba)!


/template/Home/Zkeys/PC/Static