日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Java消息中間件之ActiveMQ

一、消息中間件

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供荔浦網(wǎng)站建設(shè)、荔浦做網(wǎng)站、荔浦網(wǎng)站設(shè)計、荔浦網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、荔浦企業(yè)網(wǎng)站模板建站服務(wù),十余年荔浦做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

1.消息中間件概述

中間件:非底層操作系統(tǒng)軟件,非業(yè)務(wù)應(yīng)用軟件,不是直接給最終用戶使用的,不能直接給客戶帶來價值的軟件統(tǒng)稱為中間件。 消息中間件:關(guān)注與數(shù)據(jù)的發(fā)送和接受,利用高效可靠的異步消息傳遞機(jī)制集成分布式系統(tǒng)。 JMS:Java消息服務(wù)(Java Message Service)即JMS,是一個Java平臺中關(guān)于面向消息中間件的API,用于在兩個應(yīng)用程序之間,或分布式系統(tǒng)中發(fā)送消息,進(jìn)行異步通信。 AMQP:AMQP(advanced message queuing protocol)是一個提供統(tǒng)一消息服務(wù)的應(yīng)用層標(biāo)準(zhǔn)協(xié)議,基于此協(xié)議的客戶端與消息中間件可傳遞消息,并不受客戶端/中間件不同產(chǎn)品,不同開發(fā)語言等條件的限制。 JMS和AMQP對比

2.消息中間件圖示

3.常見消息中間件對比

3.1.ActiveMQ

(1)概述:ActiveMQ是Apache出品,最流行的,能力強(qiáng)勁的開源消息總線。ActiveMQ是一個完全支持JMS 1.1和J2EE 1.4規(guī)范的,JMS Provider實(shí)現(xiàn),盡管JMS規(guī)范出臺已經(jīng)很久的事情了,但是JMS在當(dāng)今的J2EE應(yīng)用中間仍然扮演著特殊的地位。

(2)特性:

多種語言和協(xié)議編寫客戶端。語言:Java、C、C++、C#、Ruby、Perl、Python、PHP。應(yīng)用協(xié)議:OpenWire、Stomp REST、WS、Notification、XMPP、AMQP 完全支持JMS 1.1和J2EE規(guī)范(持久化,XA消息,事務(wù)) 虛擬主題,組合目的,鏡像隊(duì)列

3.2.RabbitMQ

(1)概述:RabbitMQ是一個開源的AMQP實(shí)現(xiàn),服務(wù)器端用Erlang語言編寫。用于分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息,在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗。

(2)特性:

支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript等 AMQP的完整實(shí)現(xiàn)(vhost虛擬主機(jī)、Exchange交換器、Binding綁定、Routing Key路由器等) 事務(wù)支持/發(fā)布確認(rèn) 消息持久化

3.3.Kafka

(1)概述:Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),是一個分布式的、分區(qū)的、可靠的分布式日志存儲服務(wù)。它通過一種獨(dú)一無二的設(shè)計提供了一個消息系統(tǒng)的功能。

(2)特性:

通過O(1)的算法復(fù)雜度的磁盤數(shù)據(jù)結(jié)構(gòu)提供消息的持久化,這種結(jié)構(gòu)對于即使數(shù)以TB的消息存儲也能夠保持長時間的穩(wěn)定性能 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒鐘數(shù)百萬的消息 Partition、Consumer Group

3.4.綜合評價

二、JMS

1.JMS規(guī)范

(1)JMS相關(guān)概念

提供者:實(shí)現(xiàn)JMS規(guī)范的消息中間件服務(wù)器 客戶端:發(fā)送或接收消息的應(yīng)用程序 生產(chǎn)者/發(fā)布者:創(chuàng)建并發(fā)送消息的客戶端 消費(fèi)者/訂閱者:接收并處理消息的客戶端 消息:應(yīng)用程序之間傳遞的數(shù)據(jù)內(nèi)容 消息模式:在客戶端之間傳遞消息的方式,JMS中定義了主題和隊(duì)列兩種模式

(2)JMS消息模式

A.隊(duì)列模型

客戶端包括生產(chǎn)者和消費(fèi)者 隊(duì)列中的消息只能被一個消費(fèi)者消費(fèi) 消費(fèi)者可以隨時消費(fèi)隊(duì)列中的消息

隊(duì)列模型消息示意圖:

B.主題模型

客戶端包括發(fā)布者和訂閱者 主題中的消息被所有訂閱者消費(fèi) 消費(fèi)者不能消費(fèi)訂閱之前就發(fā)送到主題中的消息,即只能先訂閱才能消費(fèi)

主題模型消息示意圖:

(3)JMS編碼接口

ConnectionFactory 用于創(chuàng)建連接到消息中間件的鏈接工廠 Connection 代表了應(yīng)用程序和消息服務(wù)器之間的通信鏈路 Destination 指消息發(fā)布和接收的地點(diǎn),包括隊(duì)列或主題 Session 表示一個單線程的上下文,用于發(fā)送和接收消息 MessageConsumer 由會話創(chuàng)建,用于接收發(fā)送到目標(biāo)的消息 MessageProducer 由會話創(chuàng)建,用于發(fā)送消息到目標(biāo) Message 是在消費(fèi)者和生產(chǎn)者之間傳送的對象,消息頭,一組消息屬性,一個消息體

5.JMS編程接口之間的關(guān)系

2.ActiveMQ的安裝與啟動

(1)在Windows平臺安裝ActiveMQ

下載安裝包 http://activemq.apache.org/ 直接啟動,以管理員身份運(yùn)行啟動你電腦對應(yīng)版本的activemq.bat,即可成功啟動,比如,我的是64位的,即選擇如下圖中的win64文件夾下的activemq.bat,或者安裝成Windows服務(wù),以服務(wù)方式啟動,記住使用以管理員身份運(yùn)行。
使用服務(wù)啟動,我習(xí)慣設(shè)置為手動啟動,你也可以設(shè)置為自動,即在開機(jī)時就啟動

無論你是如何啟動,啟動成功后,使用瀏覽器訪問127.0.0.1:8161就可以訪問ActiveMQ的管理頁面,點(diǎn)擊Manage ActiveMQ broker,出現(xiàn)彈框輸入用戶名密碼,都默認(rèn)為admin,然后就可以進(jìn)入管理主頁了!

(2)在Linux平臺安裝ActiveMQ

下載安裝包 wget http://mirror.bit.edu.cn/apache//activemq/5.15.2/apache-activemq-5.15.2-bin.tar.gz 解壓安裝包 tar -zxvf apache-activemq-5.15.2-bin.tar.gz 啟動 解壓完成后,進(jìn)入解壓后產(chǎn)生的目錄,使用 ./activemq start 啟動,可以訪問linux服務(wù)器的ip地址加端口8161,能進(jìn)入管理頁面即成功安裝并啟動,使用./activemq stop 關(guān)閉。

3.JMS的代碼實(shí)現(xiàn)

3.1.使用JMS接口規(guī)范連接ActiveMQ

創(chuàng)建生產(chǎn)者 創(chuàng)建發(fā)布者 創(chuàng)建消費(fèi)者 創(chuàng)建訂閱者

具體代碼實(shí)現(xiàn)可參考本人碼云項(xiàng)目:https://gitee.com/kevinshaw/jms-demo.git

3.2.使用Spring集成JMS連接ActiveMQ

(1)ConnectionFactory 用于管理連接的連接工廠

一個Spring為我們提供的連接池 JmsTemplate每次發(fā)消息都會重新創(chuàng)建連接,會話和productor Spring中提供SingleConnectionFactory和CachingConnectionFactory,SingleConnectionFactory對于建立連接請求只會返回同一個Connection,并且使用同一個close方法;CachingConnectionFactory繼承自SingleConnectionFactory,所有擁有SingleConnectionFactory的所有功能,而且新增緩存功能,可以緩存會話,Producer,Consumer

(2)JmsTemplate 用于發(fā)送和接收消息的模板類

是Spring提供的,只需要向Spring容器內(nèi)注冊這個類就可以使用JmsTemplate方便的操作jms JmsTemplate類是線程安全的,可以在整個應(yīng)用范圍使用

(3)MessageListerner 消息監(jiān)聽器

實(shí)現(xiàn)一個onMessage方法,該方法只接收一個Message參數(shù)

具體代碼實(shí)現(xiàn)可參考本人碼云項(xiàng)目:https://gitee.com/kevinshaw/jms-demo.git

三、ActiveMQ集群配置

1.對消息中間件群集的原因:

實(shí)現(xiàn)高可用,以排除單點(diǎn)故障引起的服務(wù)中斷 實(shí)現(xiàn)負(fù)載均衡,以提升效率為更多客戶提供服務(wù)

2.ActiveMQ集群基礎(chǔ)知識

(1)集群方式

客戶端集群:讓多個消費(fèi)者消費(fèi)同一隊(duì)列,在隊(duì)列模式下已經(jīng)支持這種情況了,但是在主題模式下,多個消費(fèi)者是消費(fèi)了完整的消息,造成消息重復(fù)的可能; Broker clusters:多個Broker之間同步消息; Master Slave:實(shí)現(xiàn)高可用的一種方式,當(dāng)主消息服務(wù)器宕機(jī)時,備服務(wù)器可以立即補(bǔ)充,以保證服務(wù)的繼續(xù)。

(2)客戶端集群配置

ActiveMQ失效轉(zhuǎn)移(failover)

介紹:允許當(dāng)其中一臺服務(wù)器宕機(jī)時,客戶端在傳輸層上重新連接到其他消息服務(wù)器。 語法:failover:(uri1,...,uriN)?transportOptions

transportOptions參數(shù)說明:

randomize 默認(rèn)為true,表示在URI列表中選擇URI連接時是否采用隨機(jī)策略 initialReconnectDelay 默認(rèn)10,單位毫秒,表示第一次嘗試重連之間的等待的時間

(3)Broker Cluster集群配置

原理:當(dāng)有兩個節(jié)點(diǎn)A,B,節(jié)點(diǎn)A可以把消息同步到節(jié)點(diǎn)B,節(jié)點(diǎn)B也可以把消息同步到節(jié)點(diǎn)A,通過消息同步之后,節(jié)點(diǎn)A接收到的消息可以給節(jié)點(diǎn)B消費(fèi)掉,同理,節(jié)點(diǎn)B接收到的消息可以給節(jié)點(diǎn)A消費(fèi)掉。它的實(shí)現(xiàn)方式是采用的網(wǎng)絡(luò)連接器的方式。

NetwrokConncetor(網(wǎng)絡(luò)連接器):網(wǎng)絡(luò)連接器主要用于配置ActiveMQ服務(wù)器與服務(wù)器之間的網(wǎng)絡(luò)通訊方式,用于服務(wù)器透傳消息,網(wǎng)絡(luò)連接器分為靜態(tài)連接器和動態(tài)連接器。

靜態(tài)連接器:即在服務(wù)器ip地址上具體指定ip地址,通過以下配置,當(dāng)服務(wù)器比較多的時候,使用靜態(tài)連接就比較麻煩,這個時候就需要用到動態(tài)連接了

動態(tài)連接器:使用多播的方式通知其他服務(wù)器,配置如下,我們首先需要定義網(wǎng)絡(luò)連接器和傳輸連接器,傳輸連接器會告知我們一個發(fā)現(xiàn)的uri地址,這個就是我們的主播地址,這樣我們就可以達(dá)到動態(tài)擴(kuò)展服務(wù)器的效果了。

(4)Master/Slave集群配置

ActiveMQ Master Slave 集群方案:

Share nothing storage master/slave (已過時,5.8+后移除) Shared storage master/slave 共享存儲 Replicated LevelDB Store 基于復(fù)制的LevelDB Store

共享存儲集群的原理:我們把節(jié)點(diǎn)A,B的持久化配置到同一個地方,先啟動節(jié)點(diǎn)A,此時節(jié)點(diǎn)A獲取到排它鎖,節(jié)點(diǎn)A獨(dú)占資源成為Master,而節(jié)點(diǎn)B無法獲得鎖資源,節(jié)點(diǎn)B就成了Slave;節(jié)點(diǎn)A就獲得了對外開放服務(wù)的能力,可以通過外部的客戶端提交信息到節(jié)點(diǎn)A,但是不能發(fā)送消息到節(jié)點(diǎn)B;如果此時節(jié)點(diǎn)A掛了,那么節(jié)點(diǎn)B立即獲得了持久化資源的排它鎖,成為新的Master,接收到外部客戶端,而客戶端使用失效轉(zhuǎn)移之后,將消息發(fā)送到節(jié)點(diǎn)B,這個時候完成整個請求的不間斷性,完成了高可用

基于復(fù)制的LevelDB Store的原理:因?yàn)長evelDB是基于ZK的,所以它的服務(wù)器至少需要三臺,假設(shè)我們有三個服務(wù)器節(jié)點(diǎn)A,B,C,每個節(jié)點(diǎn)都有自己的儲存方式,它們都配置同一個ZooKeeper節(jié)點(diǎn),通過ZK來選舉一臺服務(wù)器作為Master,比如選舉節(jié)點(diǎn)A作為Master,這時節(jié)點(diǎn)A就具有對外部提供服務(wù)的能力,而節(jié)點(diǎn)B,C是不具備的,節(jié)點(diǎn)A獲取了服務(wù)器的外部消息資源后,它首先在本地儲存,然后通過ZK將消息同步給B,C,然后B,C分別在自己的服務(wù)器里儲存,這就是基于復(fù)制LevelDB的方式,如果節(jié)點(diǎn)A出現(xiàn)故障,那么ZK會立即選舉一個新的Master出來。

(5)兩種集群方式對比

Master/Slave:它可以做到高可用,當(dāng)一臺服務(wù)器掛了,其他服務(wù)器可以立即補(bǔ)充上去,并且保證了消息不會丟失,但做不了負(fù)載均衡,因?yàn)镾lave不具備外部服務(wù)器提供服務(wù)的能力;

Broker Cluster:它不具備高可用的能力,因?yàn)樗约旱南⒉]有在一個地方儲存,也就是說當(dāng)一臺服務(wù)器掛了的時候,它正在處理的消息可能會同步丟失,但是它可以做到負(fù)載均衡,即節(jié)點(diǎn)A,B上的消息可以互相消費(fèi)。

(6)三臺服務(wù)器的完美集群方案(既實(shí)現(xiàn)高可用,又實(shí)現(xiàn)負(fù)載均衡)

因?yàn)榛趶?fù)制LevelDB的方式至少需要三臺服務(wù)器,所以這里我們使用共享持久化資源方式;我們首先將節(jié)點(diǎn)A,B組成消息同步,然后將節(jié)點(diǎn)A,C也組成消息同步;節(jié)點(diǎn)B,C組成Master/Slave,然后按順序啟動A,B,C。這個方案能夠?qū)崿F(xiàn)節(jié)點(diǎn)A,B,C任意一臺服務(wù)器宕機(jī)時,對整個集群不受影響,仍然可以正常工作,但是需要盡快恢復(fù)宕機(jī)服務(wù)器的問題,如果A,B同時宕機(jī),整個集群就會崩潰了。所以如果要提高穩(wěn)定性,可以增加服務(wù)器數(shù)量。

四、使用其他消息中間件

前面主要介紹了ActiveMQ,其優(yōu)點(diǎn)是支持JMS,JMS讓Java的開發(fā)變得簡單,但其在各方面表現(xiàn)都比較中庸,也存在自己的問題,比如吞吐量沒有Kafka高,穩(wěn)定性沒有RabbitMQ強(qiáng)。

1.企業(yè)開發(fā)需要解決的問題

不同業(yè)務(wù)系統(tǒng)分別處理同一消息,同一業(yè)務(wù)系統(tǒng)負(fù)載處理同類消息 解決消息發(fā)送時的一致性問題 解決消息處理時的冪等性問題 基于消息機(jī)制建立事件總線

2.使用其他消息中間件時,分析需要做的事

解決各業(yè)務(wù)系統(tǒng)集群處理同一條消息 實(shí)現(xiàn)自己的消息提供者

3.RabbitMQ:使用交換器綁定到隊(duì)列

RabbitMQ消息提供者源碼解析:

3.集成Kafka

Kafka使用group.id分組消費(fèi)者

配置消費(fèi)者參數(shù)group.id相同時對消息進(jìn)行負(fù)載處理 配置服務(wù)器partitions參數(shù),控制同一個group.id下的consumer數(shù)量小于partitions Kafka只保證同一個partition下的消息是有序的

Kafka消息提供者源碼解析:



名稱欄目:Java消息中間件之ActiveMQ
當(dāng)前鏈接:http://www.dlmjj.cn/article/cppopc.html