1.0首先先介紹一下JMS,Java Message Service(JMS)是SUN提出的旨在統一各類MOM(Message-Oriented Middleware )系統接口的規範,它包含點對點(Point to Point,PTP)和發佈/訂閱(Publish/Subscribe,pub/sub)兩種消息模型,提供可靠消息傳輸、事務和消息過濾等機制。java
簡單的說,JMS制定了一個發消息的規範。是一個與具體平臺無關的API,絕大多數MOM提供商都對JMS提供支持。 ActiveMQ是Apache出品的開源項目,它是JMS規範的一個實現。服務器
1.1 jms的做用、網絡
在不一樣應用之間進行通訊或者從一個系統傳輸數據到 另一個系統。兩個應用程序之間,或分佈式系統中發送消息,進行異 步通訊。 這類問題有不少解決方案 ,好比DB、SOA、Socket通訊、RMI,等,但我 們須要根據項目的限制以及功能和性能的須要做出選擇。 JMS的應用場景:規模和複雜度較高的分佈式系統。 (1)同步通訊:客戶發出調用後,必須等待服務對象完成處理並返回結果後才能繼續執行;session
(2)客戶和服務對象的生命週期緊密耦合:客戶進程和服務對象進程都必須正常運行;若是因爲服務對象崩潰或者網絡故障致使客戶的請求不可達,客戶會接收到異常;分佈式
(3)點對點通訊:客戶的一次調用只發送給某個單獨的目標對象。ide
1.2 jms的模型性能
Java消息服務應用程序結構支持兩種模型:線程
1.點對點模型(基於隊列) 每一個消息只能有一個消費者。消息的生產者和消費者之間沒有時間上的 相關性.能夠由多個發送者,但只能被一個消費者消費。 一個消息只能被一個接受者接受一次 生產者把消息發送到隊列中(Queue),這個隊列能夠理解爲電視機頻道(channel) 在這個消息中間件上有多個這樣的channel 接受者無需訂閱,當接受者未接受到消息時就會處於阻塞狀態中間件
2. 發佈者/訂閱者模型(基於主題的) 每一個消息能夠有多個消費者。 生產者和消費者之間有時間上的相關性。訂閱一個主題的消費者只能消 費自它訂閱以後發佈的消息. 容許多個接受者,相似於廣播的方式 生產者將消息發送到主題上(Topic) 接受者必須先訂閱 注:持久化訂閱者:特殊的消費者,告訴主題,我一直訂閱着,即便網絡斷開,消息服務器也記住全部持久化訂閱者,若是有新消息,也會知道一定有人回來消費。對象
關於點對點有一種狀況是,生產者一直髮消息到activemq的隊列上,而消息者又一直不消費隊列上的消息時,activemq的服務器會報錯。
1.3 jms的公共接口
1.4 jms的基本構件
ConnectionFactory:鏈接工廠是客戶用來建立鏈接的對象,例如ActiveMQ提供的 ActiveMQConnectionFactory。
Connection: JMS Connection封裝了JMS 客戶端到JMS Provider 的鏈接與JMS提供者之間的一個虛擬的鏈接。
Session: JMS Session是生產和消費消息的一個單線程上下文。會話用於建立 消息的生產者(producer),消費者(consumer),消息(message)等, 會話,是一個事務性的上下文。 消息的生產和消費不能包含在同一個事務中。
MessageProducer:消息生產者,MessageProducer 由Session 對象建立的用來發送消息的對象
MessageConsumer :消息消費者,MessageConsumer 由Session 對象建立的用來發送消息的對象
Message :JMS定義的消息類型有TextMessage、MapMessage、BytesMessage、 StreamMessage和ObjectMessage。
Destination:消息目的地,是用來指定生產的消息的目標和它消費的消息的來源的對象。
消息隊列:Queue 點對點的消息隊列 消息主題:Tipic 發佈訂閱的消息隊列
消息主題:Tipic 發佈訂閱的消息隊列
2. java 簡單實現actviemq 進行發送和接收消息
createMessage()是對發送的消息進行處理
接收的程序也相似session.MessageConsumer(destination),destination對象指定的是隊列名稱,消息的來源