JAVA記錄-消息隊列介紹

1.JMS概述

JMS即Java消息服務(Java Message Service)應用程序接口,是一個Java平臺中關於面向消息中間件(MOM)的API,用於在兩個應用程序之間,或分佈式系統中發送消息,進行異步通訊。html

它主要用於在生產者和消費者之間進行消息傳遞,生產者負責產生消息,而消費者負責接收消息。把它應用到實際的業務需求中的話咱們能夠在特定的時候利用生產者生成一消息,並進行發送,對應的消費者在接收到對應的消息後去完成對應的業務邏輯。對於消息的傳遞有兩種類型,一種是點對點的,即一個生產者和一個消費者一一對應;另外一種是發佈/訂閱模式,即一個生產者產生消息並進行發送後,能夠由多個消費者進行接收。linux

JMS的優點 

  1. Asynchronous(異步)

    JMS is asynchronous by default. So to receive a message, the client is not required to send the request. The message will arrive automatically to the client as they become available.(JMS 本來就是一個異步的消息服務,客戶端獲取消息的時候,不須要主動發送請求,消息會自動發送給可用的客戶端)數據庫

  2. Reliable(可靠)

    JMS provides the facility of assurance that the message will delivered once and only once. You know that duplicate messages create problems. JMS helps you avoiding such problems.(JMS保證消息只會遞送一次。你們都遇到太重複建立消息問題,而JMS能幫你避免該問題。)apache

JMS具備兩種通訊模式:

      一、Point-to-Point Messaging Domain (點對點)---1對1後端

      二、Publish/Subscribe Messaging Domain (發佈/訂閱模式)---1對多瀏覽器

JMS對象

  1. 管理對象(Administered objects)-鏈接工廠(Connection Factories)和目的地(Destination)
  2. 鏈接對象(Connections)
  3. 會話(Sessions)
  4. 消息生產者(Message Producers)
  5. 消息消費者(Message Consumers)
  6. 消息監聽者(Message Listeners)

ConnectionFactory:
鏈接工廠,JMS 用它建立鏈接Connection,通常設爲單例模式,
一旦建立,就一直運行在應用容器內,客戶端使用JNDI查找鏈接工廠,而後利用鏈接工廠建立一個JMS鏈接。tomcat

Connection:
JMS鏈接表示JMS客戶端和服務器端之間的一個活動的鏈接,是由客戶端經過調用鏈接工廠的方法創建的。安全

Session:
JMS會話表示JMS客戶與JMS服務器之間的會話狀態。JMS會話創建在JMS鏈接上,表示客戶與服務器之間的一個會話線程。服務器

Destination:
消息的目的,包括隊列(PTP),主題(Pub/Sub)。架構

Message Producer和Message Consumer:
生產者和消費者對象由Session對象建立,用於發送和接收消息。

Message:
JMS 消息由如下幾部分組成:消息頭,屬性,消息體。
消息頭(header):JMS消息頭包含了許多字段,它們是消息發送後由JMS提供者或消息發送者產生,用來表示消息、設置優先權和失效時間等等,而且爲消息肯定路由Routing。
屬性(property):由消息發送者產生,用來添加刪除消息頭之外的附加信息。
消息體(body):由消息發送者產生,JMS中定義了5種消息體:ByteMessage、MapMessage、ObjectMessage、StreamMessage和TextMessage。

同步與異步

同步交互:指發送一個請求,須要等待返回,而後纔可以發送下一個請求,有個等待過程;

異步交互:指發送一個請求,不須要等待返回,隨時能夠再發送下一個請求,即不須要等待。 區別:一個須要等待,一個不須要等待,在部分狀況下,咱們的項目開發中都會優先選擇不須要等待的異步交互方式。

哪些狀況建議使用同步交互呢?好比銀行的轉帳系統,對數據庫的保存操做等等,都會使用同步交互操做,其他狀況都優先使用異步交互

並行與串行

指的是任務的執行方式。串行是指多個任務時,各個任務按順序執行,完成一個以後才能進行下一個。並行指的是多個任務能夠同時執行。異步是多個任務並行的前提條件。

2.消息隊列概述

消息隊列(Message Queue,簡稱MQ),從字面意思上看,本質是個隊列,FIFO先入先出,只不過隊列中存放的內容是message而已。其主要用途:不一樣進程Process/線程Thread之間通訊。

經過消息隊列,將短期高併發產生的事務消息存儲在消息隊列中,從而削平高峯期的併發事務,改善網站系統的性能。在京東之類的電子商務網站促銷活動中,合理地使用消息隊列,能夠有效地抵禦促銷活動剛開始就開始大量涌入的訂單對系統形成的衝擊。

消息隊列中間件是分佈式系統中重要的組件,主要解決應用耦合,異步消息,流量削鋒控制等問題。實現高性能,高可用,可伸縮和最終一致性架構。是大型分佈式系統不可缺乏的中間件。

目前在生產環境,使用較多的消息隊列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。

消息中間件優點:異步和解耦

如:服務端口監聽--報文接收--報文解碼--業務處理--報文編碼--寫回客戶端

3.ActiveMq

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

4.maven activemq配置

<dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-core</artifactId>
      <version>5.7.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-pool</artifactId>
      <version>5.12.1</version>
    </dependency>

 5.activemq配置

1.http://activemq.apache.org/download.html

2.下載解壓

3.linux 下輸入 ./activemq start/stop

4.ActiveMQ默認啓動時,啓動了內置的jetty服務器,提供一個用於監控ActiveMQ的admin應用。 

admin:http://127.0.0.1:8161/admin/

咱們在瀏覽器打開連接以後輸入帳號密碼(這裏和tomcat 服務器相似)

默認帳號:admin

密碼:admin

6.什麼狀況下使用ActiveMQ?

  1. 多個項目之間集成 
    (1) 跨平臺 
    (2) 多語言 
    (3) 多項目
  2. 下降系統間模塊的耦合度,解耦 
    (1) 軟件擴展性
  3. 系統先後端隔離 (1) 先後端隔離,屏蔽高安全區
相關文章
相關標籤/搜索