CentOS源碼安裝消息隊列ActiveMQ

消息隊列ActiveMQ介紹

JMS全稱:Java Message Service中文:Java消息服務。JMS是java的一套API標準,最初的目的是爲了是應用程序能夠訪問現有的MOM系統(MOM是Message Oriented Middleware英文的縮寫,指的是利用高效可靠的消息傳遞機制進行平臺無關的數據交流,並基於數據通信來進行分佈式系統的集成。) 後來被許多現有的MOM供應商採用,並實現爲MOM系統。【常見的MOM系統包括Apache的ActiveMQ、阿里巴巴的RocketMQ、IBM的MQSeries、Microsoft的MSMQ、BEA的RabbitMQ等。(並非全部的MOM系統都遵循JMS規範)】注意:JMS是一個標準名稱,MOM是一套系統名稱,這套系統指的就是上面所說的利用高效可靠的消息傳遞機制進行平臺無關的數據交流,並基於數據通信來進行分佈式系統的集成;而隨後各大企業研發了屬於自己的MOM系統,並重新命名,例如Apache研發的ActiveMQ,阿里巴巴的RoketMQ等。

“消息”是在兩臺計算機間傳送的數據單位。消息可以非常簡單,例如只包含文本字符串;也可以更復雜,包含嵌入對象。消息被髮送到隊列中。“消息隊列”是在消息的傳輸過程中保存消息的容器,消息隊列管理器在將消息從它的源中繼到它的目標時充當中間人。隊列的主要目的是提供路由並保證消息的傳遞;如果發送消息時接受者不可用,消息隊列會保留消息,直到成功地傳遞給消息處理者(接收人)。

消息隊列的主要特點是異步處理,主要目的是減少請求響應的時間和解耦。所以主要的使用場景就是將比較耗時而且不需要即時“同步”返回結果的操作作爲消息然後將該消息放入“消息隊列”。同時由於使用了消息隊列,只要保證消息格式不變,消息的發送方和接收方並不需要彼此聯繫,也不需要受對方的影響,即解耦合。如:跨系統的異步通信,所有需要異步交互的地方都可以使用消息隊列。就像我們除了打電話(同步)以外,還需要發短信,發電子郵件(異步)的通訊方式。多個應用之間的耦合,由於消息是平臺無關和語言無關的,而且語義上也不再是函數調用,因此更適合作爲多個應用之間的松耦合的接口,基於消息隊列的耦合,不需要發送方和接收方同時在線。

在企業應用集成(EAI)中,文件傳輸,共享數據庫,消息隊列,遠程過程調用都可以作爲集成的方法。應用內的同步變異步,比如訂單處理,就可以由前端應用將訂單信息放到隊列,後端應用從隊列裏依次獲得消息處理,高峯期時的大量訂單可以積壓在隊列中慢慢被處理掉。由於同步通常以爲着阻塞,而大量線程的阻塞會降低計算機的處理能力。

消息驅動和架構(EDA),系統分解爲消息隊列,和消息製造者以及消息消費者,一個處理流程可以根據需要拆成多個階段(Stage),階段之間用隊列連接起來,前一個階段處理的結果放入隊列,後一個階段從隊列中獲取消息繼續處理。應用需要更靈活的耦合方式,如發佈訂閱,比如可以指定路由規劃。跨局域網,甚至跨城市的通訊,比如北京機房與廣州機房的應用程序通信。
ActiveMQ的特性

1.多種語言和協議編寫的客戶端。語言:Java,C,C++,C#,Ruby,Perl,Python,PHP。應用協議:Openwire,Stomp REST,WS Notification,XMPP,AMQP。
2.對Spring的支持。ActiveMQ可以很容易內嵌到使用Spring的系統裏面去通過了常見J2EE服務器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的測試,其中通過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動的部署到任何兼容J2EE 1.4 商業服務器上
3.支持多種傳輸協議。in-VM,TCP,SSl,NIO,UDP,JGroups,JXTA,支持通過JDBC和journal提供高速的消息持久化
4.從設計上保證了高性能的集羣。客戶端-服務器,點對點
5.支持Ajax
6.支持Axis的整合,WebServices
7.可以很容易的調用內嵌JMS provider,進行測試

ActiveMQ的應用場景

1.多個項目之間集成 (1)跨平臺 (2)多語言 (3)多項目
2.降低系統間模塊的耦合度,解耦 (1)軟件擴展性
3.系統前後端隔離 (1)前後端隔離,屏蔽高安全區

ActiveMQ名詞簡介

Destination 目的地,JMS Provider(消息中間件)負責維護,用於對Message進行管理的對象。MessageProducer需要指定Destnation才能發送消息,MessageConsumer需要指定Destination才能接收消息。

Producer 消息生成者(客戶端、負責生成消息),負責發送Message到目的地。應用接口爲MessageProducer。在JMS規範中,所有的標準定義都在javax.jms包中。*

Consumer【Receiver】 消息消費者(負責處理消息),負載從目的地中消費【處理|監聽|訂閱】Message。應用接口爲MessageConsumer。

Message 消息(Message),消息封裝一次通信的內容。常見類型有:StreamMessage(流信息)、BytesMessage(字節信息)、TextMessage(文本信息)、ObjectMessage(對象信息)、MapMessage(圖信息)。

ConnectionFactory 連接工廠,用於創建鏈接的工廠類型。注意,不能和JDBC中的ConnectionFactory混淆。

Connection 鏈接,用於建立訪問ActiveMQ連接的類型,由鏈接工廠創建,注意,不能和JDBC中的Connection混淆。

Session 會話,一次持久有效有狀態的訪問,由鏈接創建,是具體操作信息的基礎支撐。

Queue & Topic Queue是隊列目的地,Topic是主題目的地。都是Destnation的子接口。(1)Queue特點:隊列中的消息,默認只能由唯一的一個消費者處理。一旦被消息消費者消費,存儲在消息隊列中的信息立刻被刪除。(2)Topic特點:主題中的消息,會發送給所有的消費者同時處理。只有在消息可以重複處理的業務中場景中可使用。

PTP Point to Point。點對點消息模型。就是基於Queue實現的消息處理方式。

PUB & SUB Publish & Subscribe。消息的發佈/訂閱模型。是基於Topic實現的消息處理方式。

PTP處理模式(Queue)

1.消息生產者生產消息發送到queue中,然後消息消費者從Queue中取出並且消費信息。
2.消息被消費以後,Queue中不在有存儲,所有消息消費者不可能消費到已經被消費的信息。
3.Queue支持存在多個消費者,但是對一個消息而言,只會有一個消費者可以消息,其它的則不能消費此信息了。
4.當消費者不存在時,消息會一直保存,直到有消費消費。
在這裏插入圖片描述

Publish/Subscribe處理模式

1.消息生產者(發佈)將消息發佈到topic中,同時有多個消息消費者(訂閱)消費該信息。2.和點對點方式不同,發佈到topic的消息會被所有訂閱者消費。3.當生產者發佈消息,不管是否有消費者。都不會報錯信息 4.一定要先有消息的消費者,後有消息的生產者
在這裏插入圖片描述

PTP和PUB/SUB簡單對比

在這裏插入圖片描述

下載資源

ActiveMQ下載頁面:http://activemq.apache.org/download.html
JDK下載頁面:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
注意:版本說明
ActiveMQ5.10.x以上版本必須使用JDK1.8才能正常使用。
ActiveMQ5.9.x及以下版本使用JDK1.7即可正常使用。

上傳服務器

在此我們使用JDK版本:jdk-8u191-linux-x64.tar.gz
在此我們使用的ActiveMQ版本:apache-activemq-5.15.6-bin.tar.gz

解壓安裝

[root@CentOS src]# tar xf jdk-8u191-linux-x64.tar.gz 
[root@CentOS src]# tar xf apache-activemq-5.15.6-bin.tar.gz 
[root@CentOS src]# mv jdk1.8.0_191 /usr/local/java
[root@CentOS src]# mv  apache-activemq-5.15.6 /usr/local/activemq
[root@CentOS src]# tail -1 /etc/profile
export PATH=/usr/local/java/bin:$PATH
[root@CentOS src]# source /etc/profile
[root@CentOS src]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
activemq文件簡介

[root@CentOS /]# ls /usr/local/activemq/
activemq-all-5.15.6.jar  conf  docs      lib      NOTICE      tmp      webapps-demo 
bin   data  examples  LICENSE  README.txt  webapps
activemq-all-5.15.6.jar:Java開發客戶端的jar包
webapps:activemq提供了一個網頁管理的控制檯,http://127.0.0.1:8161/admin可以訪問到,可以放置web的程序目錄
webapps-demo:activemq提供了一些基礎案
lib:是activemq依賴的jar包文件
examples:apache提供了一個案例代碼
docs:幫助文檔
data:activemq默認用來存儲數據的位置
conf:配置文件
bin:二進制文件,用來啓動、關閉、重啓activemq的控制文件

配置文件簡介

[root@CentOS /]# ls /usr/local/activemq/conf/
        activemq.xml           client.ks                   groups.properties       jmx.access          login.config
        broker.ks              client.ts                   java.security           jmx.password        users.properties
        broker-localhost.cert  credentials-enc.properties  jetty-realm.properties  log4j.properties
        broker.ts              credentials.properties      jetty.xml               logging.properties

activemq.xml: activemq的主配置文件,就是spring配置文件. 其中配置的是ActiveMQ應用使用的默認對象組件.transportConnectors標籤,配置鏈接端口信息的。其中的端口號61616是ActiveMQ對外發布的tcp協議訪問端口. 就是java代碼訪問ActiveMQ時使用的端口

jetty.xml: spring配置文件, 用於配置jetty服務器的默認對象組,件jetty是類似tomcat的一箇中間件容器。ActiveMQ默認支持一個網頁版的服務查看站點. 可以實現ActiveMQ中消息相關數據的頁面查看.8161端口, 是ActiveMQ網頁版管理站點的默認端口。在ActiveMQ網頁版管理站點中,需要登錄, 默認的用戶名和密碼都是admin。

users.properties: 是用於配置客戶端通過協議訪問ActiveMQ時,使用的用戶名和密碼。格式爲:用戶名=密碼

groups.properties: 是用於配置客戶端通過協議訪問ActiveMQ時,使用的組名和用戶名。格式爲:組名=用戶名

jetty-realm.properties: 爲jetty.xml網頁控制檯所用到配置文件 該文件內關聯了登錄web網頁控制檯的用戶名密碼

啓動ActiveMQ

[root@CentOS /]# /usr/local/activemq/bin/activemq start 
INFO: Loading '/usr/local/activemq//bin/env'
INFO: Using java '/usr/local/java/bin/java'
INFO: Starting - inspect logfiles specified in logging.properties and log4j.properties to get details
INFO: pidfile created : '/usr/local/activemq//data/activemq.pid' (pid '3637')

注意:ActiveMQ啓動需要拉起jetty中間件,該中間件啓動較慢,請耐心等待......
啓動好了之後,會出現以下端口,裏面的8161爲web頁面所提供默認的web訪問端口,如需修改請修改jetty.xml文件
[root@CentOS /]# ss -anplt | grep java
LISTEN     0      50          :::8161                    :::*                   users:(("java",pid=3637,fd=141))
LISTEN     0      50          :::37253                   :::*                   users:(("java",pid=3637,fd=13))
LISTEN     0      128         :::5672                    :::*                   users:(("java",pid=3637,fd=131))
LISTEN     0      128         :::61613                   :::*                   users:(("java",pid=3637,fd=132))
LISTEN     0      50          :::61614                   :::*                   users:(("java",pid=3637,fd=134))
LISTEN     0      128         :::61616                   :::*                   users:(("java",pid=3637,fd=126))
LISTEN     0      128         :::1883                    :::*                   users:(("java",pid=3637,fd=133))

測試訪問jetty所提供的web控制檯

•控制檯地址:http://IP:8161/admin
•默認用戶名和密碼都爲admin
在這裏插入圖片描述
在這裏插入圖片描述
1.ActiveMQ網頁狀態欄內容介紹
2.Home:主頁面,有歡迎界面,broker標籤介紹,一些基礎信息
3.Queues:隊列的詳細信息,包含了待處理消息數量、消費者數量、消息隊列、已消費信息等
4.Topics:主題的詳細信息,包含了消費者數量、消息隊列和Queues差不多
5.Subscribers:訂閱者,專門用於檢查發佈/訂閱的端口
6.connections:連接,查看ActiveMQ所有支持的協議的連接數量等信息
7.Network:網絡,有關於遠程網絡的標籤,遠程網絡地址等信息
8.Scheduled:調動程序,可以理解爲定時任務
9.Send:發送,測試發送消息的功能,裏面包含了模擬發送消息的目的地、相關ID、回覆、類型、消息組、延遲時間(毫秒)、重複次數、要發送的消息數量等等

測試Web頁面Send功能

在這裏插入圖片描述
發送過之後會自動跳到Queue或者Topic,取決於你發送的消息類型,更多功能請自行測試
在這裏插入圖片描述

擴展

在這裏插入圖片描述
https://www.jianshu.com/u/2a55010e3a04

參考鏈接 :

消息隊列ActiveMQ : https://mp.weixin.qq.com/s/UaIWI0piXfpsQltLFgXdcA

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章