Java基礎(chǔ)知識(shí):初識(shí)ActiveMQ消息中間件
在介紹ActiveMQ之前,先來(lái)復(fù)習(xí)一下J2EE中的JMS規(guī)范。
JMS是java Message Service的簡(jiǎn)稱(chēng),用來(lái)發(fā)送異步消息,在不同系統(tǒng)和不同的模塊之間我們可以利用它實(shí)現(xiàn)集成。
JMS有兩個(gè)好處,第一個(gè)就是讓模塊之間或者系統(tǒng)之間的耦合度降低,第二個(gè)是異步通信。
JMS的消息機(jī)制有2種模型,一種是Point to Point,表現(xiàn)為隊(duì)列的形式。發(fā)送的消息,只能被一個(gè)接收者取走;另一種是Topic,可以被多個(gè)訂閱者訂閱,類(lèi)似于群發(fā)。
在JMS中有這樣幾個(gè)重要的核心接口和類(lèi):
1. ConnectionFactory,用于jms client獲取與jms provider的連接。不同的jms產(chǎn)品,對(duì)這個(gè)接口有不同的實(shí)現(xiàn),比如說(shuō)ActiveMQ,這個(gè)接口的實(shí)現(xiàn)類(lèi)是ActiveMQConnectionFactory
2. Connection,是由ConnectionFactory產(chǎn)生的,表示jms client與jms provider的連接
3. Session,是由Connection產(chǎn)生的,表示一個(gè)會(huì)話(huà)。Session是關(guān)鍵組件,Message、Producer/Consumer、Destination都是在Session上創(chuàng)建的
4. Message,這個(gè)組件很好理解,就是傳輸?shù)南,里面包括head、properties、body,其中head是必選的
5. Destination,是消息源,對(duì)發(fā)送者來(lái)說(shuō),就是消息發(fā)到哪里;對(duì)接收者來(lái)說(shuō),就是從哪里取消息。Destination有2個(gè)子接口,Queue和Topic,分別對(duì)應(yīng)上面提到的2種模型
6. MessageProducer,是消息發(fā)送者,創(chuàng)建這個(gè)組件的代碼類(lèi)似:
Java代碼 :
[java]
Destination dest =session.createQueue("dotaQueue");// 消息目的地
MessageProducer producer =session.createProducer(dest);// 消息發(fā)送者
可以注意到,這里需要把Destination作為參數(shù),傳入createProducer()方法,這說(shuō)明消息發(fā)送者是綁定到Destination上的,這個(gè)發(fā)送者發(fā)送的消息,會(huì)發(fā)送到這個(gè)綁定的Destination上
7. MessageConsumer,是消息接收者,和Message Producer是相反的一種組件
對(duì)JMD有所了解之后,我們來(lái)看ActiveMQ。
運(yùn)行bin目錄下的activemq.bat啟動(dòng)mq,mq會(huì)占用至少2個(gè)端口,默認(rèn)的是61616和8161
61616是等待jms client的連接,8161是ActiveMQ自帶的一個(gè)web應(yīng)用
localhost:8161/demo,可以看到各種官方提供的例子
localhost:8161/admin,是ActiveMQ的管理控制臺(tái)