MOM主要特色:html
消息異步接受:相似於手機短信的行爲,消息發送者不須要等待消息接受者的響應,減小軟件多系統集成的耦合度;java
消息可靠接受:確保消息在消息中間件可靠保存,只要接受方接受到消息後纔可刪除,多個消息也能夠組成原子事務;linux
JMS是java message service,java消息服務,是javaEE的一個技術。web
JMS定義了java中訪問消息中間件的接口,可是沒有實現,實現了JMS接口的消息中間件就稱爲JMS Provider,例如AvtiveMQ。spring
實現了JMS接口和規範的消息中間件。apache
JMS消息,JMS消息有如下三部分組成:windows
一、消息頭:每一個消息頭字段都有相應的getter和setter方法。安全
二、消息體:封裝具體的消息數據。服務器
三、消息屬性:若是須要除消息頭以外的值,那麼均可以使用消息屬性。網絡
消息的發送能夠採用如下兩種方式:
一、同步方式:經過調用的消費裏的receive方法從目的地顯式的提取消息,receive方法能夠一直阻塞到消息到達。
二、異步方式:客戶能夠爲消費者註冊一個消息監聽器,以定義在消息到達時所採起的動做。
JMS規範中定義了兩種消息傳遞域:點對點(point-to-point)消息傳遞域,和發佈/訂閱(publish/subscribe)消息傳遞域。
一、點對點消息傳遞域的特色以下:
(1)、每一個消息只能有一個消費者,即每一個消息只能被其中一個消費者消費。
(2)、消息的生產者和消費者之間沒有時間上的相關性。不管消費者在生產者發送消息時是否處於運行狀態,它均可以提取消息。
如下是點對點的模型圖:
(中間的就是隊列,client 1就是生產者,它向隊列中發送消息,client 2是消費者,它負責從隊列中提取消息,消息消費完成後,隊列中的消息就消失了)
二、發佈/訂閱消息傳遞域的特色:
(1)、每一個消息能夠被多個消費者消費,前提是這些消息這已經對topic(主題進行了訂閱)。
(2)、消息的生產者和消費者之間有時間上的相關性,訂閱了該主題的消費者只能消費該主題發佈的消息,若是此時該消費者沒有設置消息持久化,且沒有在線,
而主題已經完成了消息發佈,那麼該消費者不會收到那主題發佈的消息。
如下是發佈/訂閱的模型圖:
(topic爲主題,client 1爲生產者,它負責向主題發佈消息,client 2和client 3均爲訂閱了該主題的消費者,但client 1發送消息,且client 2和3都在線,那麼將能夠收到消息)
message.setProperty("username",username);
message.getProperty("username");等。
2.JMS定義的屬性
使用「JMSX」做爲屬性名的前綴,經過connection.getMetaData().getJMSXPropertyNames();方法返回全部鏈接支持JMSX的屬性名字。
3.JMS定義的屬性以下:
1)、JMSXUserID:發送消息的用戶標識,發送時提供商設置。
2)、JMSXAppID:發送消息的應用標識,發送時提供商設置。
3)、JMSXDeliveryCount:轉發消息重試次數,第一次是1,第二次是2...,依次類推,發送時提供商設置。
4)、JMSXGroupID:消息所在消息組的標識,由客戶端設置。
5)、JMSXGroupSeq:組內消息的序號,第一是1,第二是2....依此類推,由客戶端設置。
6)、JMSXProducerTXID:產生消息是事務的事務標識,發送時提供商設置。
7)、JMSXConsumerTXID:消費消息的事務的事務標識,接收時提供商設置。
8)、JMSXState:消息狀態,1(等待)、2(準備)、3(到期)、4(保留)。
ActiveMQ是有Apache推出的,一款開源的、徹底支持JMS1.1和J2EE1.4規範的JMS Provider實現的消息中間件(Message Oriented Middleware, MOM)
最主要的功能就是:實現了JMS Provider,用來幫助實現高可用、高性能、易用、可伸縮和安全的企業級面向消息服務的系統。
bin (windows下面的bat和unix/linux下面的sh) 啓動ActiveMQ的啓動服務就在這裏
conf (activeMQ配置目錄,包含最基本的activeMQ配置文件)
data (默認是空的)
docs (index,replease版本里面沒有文檔)
example (幾個例子)
lib (activeMQ使用到的lib)
webapps (系統管理員控制檯代碼)
webapps-demo(系統示例代碼)
activemq-all-5.8.0.jar (ActiveMQ的binary)
user-guide.html (部署指引)
LICENSE.txt
NOTICE.txt
README.txt
activemq默認採用61616端口提供JMS服務,採用8161端口提供管理控制檯服務,執行如下命令以便檢驗是否已經成功啓動activemq服務:
能夠訪問管理員界面:http://localhost:8161/admin,默認用戶名和密碼admin/admin。若是你想修改用戶名和密碼的話,在conf/jetty-realm.properties中修改便可。
其中在導航菜單中,Queues是隊列方式消息。Topics是主題方式消息。Subscribers消息訂閱監控查詢。Connections能夠查看連接數,分別能夠查看xmpp、ssl、stomp、openwire、ws和網絡連接。Network是網絡連接數監控。Send能夠發送消息數據。
一、ActiviteMQ消息有3種形式:
JMS 公共 |
點對點域 |
發佈/訂閱域 |
ConnectionFactory |
QueueConnectionFactory |
TopicConnectionFactory |
Connection |
QueueConnection |
TopicConnection |
Destination |
Queue |
Topic |
Session |
QueueSession |
TopicSession |
MessageProducer |
QueueSender |
TopicPublisher |
MessageConsumer |
QueueReceiver |
TopicSubscriber |
(1)、點對點方式(point-to-point)
點對點的消息發送方式主要創建在 Message Queue,Sender,reciever上,Message Queue 存貯消息,Sneder 發送消息,receive接收消息.具體點就是Sender Client發送Message Queue ,而 receiver Cliernt從Queue中接收消息和"發送消息已接受"到Quere,確認消息接收。消息發送客戶端與接收客戶端沒有時間上的依賴,發送客戶端能夠在任什麼時候刻發送信息到Queue,而不須要知道接收客戶端是否是在運行
(2)、發佈/訂閱 方式(publish/subscriber Messaging)
發佈/訂閱方式用於多接收客戶端的方式.做爲發佈訂閱的方式,可能存在多個接收客戶端,而且接收端客戶端與發送客戶端存在時間上的依賴。一個接收端只能接收他建立之後發送客戶端發送的信息。做爲subscriber ,在接收消息時有兩種方法,destination的receive方法,和實現message listener 接口的onMessage 方法。
發送消息的基本步驟:
(1)、建立鏈接使用的工廠類JMS ConnectionFactory
(2)、使用管理對象JMS ConnectionFactory創建鏈接Connection,並啓動
(3)、使用鏈接Connection 創建會話Session
(4)、使用會話Session和管理對象Destination建立消息生產者MessageSender
(5)、使用消息生產者MessageSender發送消息
消息接收者從JMS接受消息的步驟
(1)、建立鏈接使用的工廠類JMS ConnectionFactory
(2)、使用管理對象JMS ConnectionFactory創建鏈接Connection,並啓動
(3)、使用鏈接Connection 創建會話Session
(4)、使用會話Session和管理對象Destination建立消息接收者MessageReceiver
(5)、使用消息接收者MessageReceiver接受消息,須要用setMessageListener將MessageListener接口綁定到MessageReceiver消息接收者必須實現了MessageListener接口,須要定義onMessage事件方法。