日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA消息服务JMS规范及原理详解

發布時間:2023/12/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA消息服务JMS规范及原理详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、簡介

JMS即Java消息服務(Java Message Service)應用程序接口,是一個Java平臺中關于面向消息中間件(MOM)的API,用于在兩個應用程序之間,或分布式系統中發送消息,進行異步通信。Java消息服務是一個與具體平臺無關的API,絕大多數MOM提供商都對JMS提供支持。

JMS允許應用程序組件基于JavaEE平臺創建、發送、接收和讀取消息。它使分布式通信耦合度更低,消息服務更加可靠以及異步性。

?

二、常用術語介紹

  在提到JMS時,我們通常會說到一些術語,解釋如下:

  • 消息中間件(JMS Provider) : 指提供了對JMS協議的第三方組件,比如ActiveMQ就是一個消息中間件,另外比較知名的還有KFA, Rabbit MQ等。
  • 消息模式:分為點對點(Point to Point,即P2P)和發布/訂閱(Pub/Sub),對應的數據結構分別是隊列(Queue)和主題(Topic)
  • 消息(Message): 通信內容的載體,其結構主要分為消息頭,屬性和消息體,并且根據存儲結構的不同分為好幾種,后面會詳細提到。
  • 消息生產者:產生消息的一方,在P2P模式下,指消息發送者(Sender),在P/S模式下指消息發布者(Publisher)
  • 消息消費者:接收消息的一方,對應于兩種模式分別是消息接收者(Receiver)和消息訂閱者(Subscriber) ? ? ? ? ? ? ? ? ? ? ? ? ?
  • ?

    三、JMS基本概念及原理詳解

    1、基本概念
      JMS是java的消息服務,JMS的客戶端之間可以通過JMS服務進行異步的消息傳輸。

    2、體系架構

      JMS由以下元素組成。

      1.JMS提供者?
      連接面向消息中間件的,JMS接口的一個實現。提供者可以是Java平臺的JMS實現,也可以是非Java平臺的面向消息中間件的適配器。

      2.JMS客戶?
      生產或消費消息的基于Java的應用程序或對象。

      3.JMS生產者?
      創建并發送消息的JMS客戶。

      4.JMS消費者?
      接收消息的JMS客戶。

      5.JMS消息?
      包括可以在JMS客戶之間傳遞的數據的對象

      6.JMS隊列?
      一個容納那些被發送的等待閱讀的消息的區域。隊列暗示,這些消息將按照順序發送。一旦一個消息被閱讀,該消息將被從隊列中移走。

      7.JMS主題?
      一種支持發送消息給多個訂閱者的機制。


    3、JMS消息模型(即點對點和發布訂閱模型)

        1、Point-to-Point(P2P)

        2、Publish/Subscribe(Pub/Sub)


    4、P2P
      1、P2P模式圖效果
          
      2、涉及到的概念

        2.1、消息隊列(Queue)
        2.2、提供者(Sender)
        2.3、消費者(Receiver)
        2.4、每個消息都被發送到一個特定的隊列,接收者從隊列中獲取消息。隊列保留著消息,直到他們被消費或超時。

      3、P2P的特點    

        3.1、每個消息只有一個消費者(Consumer)(即一旦被消費,消息就不再在消息隊列中)
        3.2、提供者和消費者之間在時間上沒有依賴性,也就是說當提供者發送了消息之后,不管消費者有沒有正在運行,它不會影響到消息被發送到隊列
        3.3、每條消息僅會傳送給一個消費者。可能會有多個消費者在一個隊列中偵聽,但是每個隊列中的消息只能被隊列中的一個消費者所消費。
        3.4、消息存在先后順序。一個隊列會按照消息服務器將消息放入隊列中的順序,把它們傳送給消費者。當已被消費時,就會從隊列頭部將它們刪除(除非使用了消息優先級)。
        3.5、消費者在成功接收消息之后需向隊列應答成功
        PS:如果你希望發送的每個消息都應該被成功處理的話,那么你需要P2P模式。


    5、Pub/Sub(發布/訂閱模式)
      
      1、Pub/Sub模式效果圖
      2、涉及到的概念

        2.1、主題(Topic)
        2.2、發布者(Publisher)
        2.3、訂閱者(Subscriber)

        PS:客戶端將消息發送到主題。多個發布者將消息發送到Topic,系統將這些消息傳遞給多個訂閱者。
      
      3、Pub/Sub(發布/訂閱模式)的特點

        3.1、每個消息可以有多個消費者
        3.2、發布者和訂閱者之間有時間上的依賴性。針對某個主題的訂閱者,它必須創建一個訂閱者之后,才能消費發布者的消息,而且為了消費消息,訂閱者必須保持運行的狀態。
        3.3、為了緩和這樣嚴格的時間相關性,JMS允許訂閱者創建一個可持久化的訂閱。這樣,即使訂閱者沒有被激活(運行),它也能接收到發布者的消息。
        3.4、每條消息都會傳送給稱為訂閱者的多個消息消費者。訂閱者有許多類型,包括持久型、非持久型和動態型。
        3.5、發布者通常不會知道、也意識不到哪一個訂閱者正在接收主題消息。
        3.6、消息被推送給消費者,這意味著消息會傳送給消費者,而無須請求。

        PS:如果你希望發送的消息可以不被做任何處理、或者被一個消息者處理、或者可以被多個消費者處理的話,那么可以采用Pub/Sub模型


    6、關于消息的消費
      在JMS中,消息的產生和消息是異步的。對于消費來說,JMS的消息者可以通過兩種方式來消費消息。
      

      6.1、同步

        訂閱者或消費者調用receive方法來接收消息,receive方法在能夠接收到消息之前(或超時之前)將一直阻塞

      6.2、異步

        訂閱者或消費者可以注冊為一個消息監聽器。當消息到達之后,系統自動調用監聽器的onMessage方法。

    ?

    7、JMS應用程序接口

      7.1、ConnectionFactory 接口(連接工廠)
        創建Connection對象的工廠,根據消息類型的不同,用戶將使用隊列連接工廠,或者主題連接工廠分,
        別有QueueConnectionFactory和TopicConnectionFactory兩種。可以通過JNDI來查找ConnectionFactory對象。
      
      7.2、Destination 接口(目標)
        Destination是一個包裝了消息目標標識符的被管對象,消息目標是指消息發布和接收的地點,或者是隊列,或者是主題。
        是消息生產者的消息發送目標或者說消息消費者的消息來源。對于消息生產者來說,它的Destination是某個隊列(Queue)或某個主題(Topic);
        對于消息消費者來說,它的Destination也是某個隊列或主題(即消息來源)。
        所以,Destination實際上就是兩種類型的對象:Queue、Topic可以通過JNDI來查找Destination。

      7.3、Connection 接口(連接)
        Connection表示在客戶端和JMS系統之間建立的鏈接(對TCP/IP socket的包裝)。
        Connection可以產生一個或多個Session。跟ConnectionFactory一樣,Connection也有兩種類型:QueueConnection和TopicConnection。

      7.4、Session 接口(會話)
        Session是我們操作消息的接口。表示一個單線程的上下文,用于發送和接收消息。
        由于會話是單線程的,所以消息是連續的,就是說消息是按照發送的順序一個一個接收的。
        可以通過session創建生產者、消費者、消息等。Session提供了事務的功能。當我們需要使用session發送/接收多個消息時,可以將這些發送/接收動作放到一個事務中。
        同樣,也分QueueSession和TopicSession。

      7.5、MessageProducer 接口(消息的生產者)
        消息生產者由Session創建,并用于將消息發送到Destination。消費者可以同步地(阻塞模式),或異步(非阻塞)接收隊列和主題類型的消息。
        同樣,消息生產者分兩種類型:QueueSender和TopicPublisher。可以調用消息生產者的方法(send或publish方法)發送消息。

      7.6、MessageConsumer 接口(消息消費者)
        消息消費者由Session創建,用于接收被發送到Destination的消息。兩種類型:QueueReceiver和TopicSubscriber。
        可分別通過session的createReceiver(Queue)或createSubscriber(Topic)來創建。
        當然,也可以session的creatDurableSubscriber方法來創建持久化的訂閱者。

      7.7、Message 接口(消息)
        是在消費者和生產者之間傳送的對象,也就是說從一個應用程序創送到另一個應用程序。一個消息有三個主要部分:
        1、消息頭(必須):包含用于識別和為消息尋找路由的操作設置。
        2、一組消息屬性(可選):包含額外的屬性,支持其他提供者和用戶的兼容。可以創建定制的字段和過濾器(消息選擇器)。
        3、一個消息體(可選):允許用戶創建五種類型的消息(文本消息,映射消息,字節消息,流消息和對象消息)。消息接口非常靈活,并提供了許多方式來定制消息的內容。

        消息接口非常靈活,并提供了許多方式來定制消息的內容。

      7.8、MessageListener
        消息監聽器。如果注冊了消息監聽器,一旦消息到達,將自動調用監聽器的onMessage方法。
        EJB中的MDB(Message-Driven Bean)就是一種MessageListener。

    ?

    ?

    四、JMS提供者實現

      要使用Java消息服務,你必須要有一個JMS提供者,管理會話和隊列。現在既有開源的提供者也有專有的提供者。
      開源的提供者包括:Apache ActiveMQ、Kafka、WebMethods、阿里的RocketMQ等

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的JAVA消息服务JMS规范及原理详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。