<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 什么是JMS JMS即Java消息服務(Java Message Service)應用程序接口是一個Java平臺中關于面向消息中間件(MOM)的API,用于在兩個應用程序之間,或分布式系統中發送消息,進行異步通信。 Java消息服務是一個與具體平臺無關的API,絕大多數MOM提供商都對JMS提供支持。 JMS是一種與廠商無關的 API,用來訪問消息收發系統消息。它類似于JDBC(Java Database Connectivity): 這里,JDBC 是可以用來訪問許多不同關系數據庫的 API,而 JMS 則提供同樣與廠商無關的訪問方法,以訪問消息收發服務。許多廠商都支持 JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ,這只是幾個例子。 JMS 使您能夠通過消息收發服務(有時稱為消息中介程序或路由器)從一個 JMS 客戶機向另一個 JMS客戶機發送消息。消息是 JMS 中的一種類型對象,由兩部分組成:報頭和消息主體。報頭由路由信息以及有關該消息的元數據組成。消息主體則攜帶著應用程序的數據或有效負載。根據有效負載的類型來劃分,可以將消息分為幾種類型,它們分別攜帶:簡單文本(TextMessage)、可序列化的對象 (ObjectMessage)、屬性集合 (MapMessage)、字節流 (BytesMessage)、原始值流 (StreamMessage),還有無有效負載的消息 (Message)。 # JMS規范 1. 專業技術規范 JMS(Java Messaging Service)是Java平臺上有關面向消息中間件(MOM)的技術規范,它便于消息系統中的Java應用程序進行消息交換,并且通過提供標準的產生、發送、接收消息的接口簡化企業應用的開發,翻譯為Java消息服務。 2. 體系架構 JMS由以下元素組成。 JMS提供者:連接面向消息中間件的,JMS接口的一個實現。提供者可以是Java平臺的JMS實現,也可以是非Java平臺的面向消息中間件的適配器。 JMS客戶:生產或消費基于消息的Java的應用程序或對象。 JMS生產者:創建并發送消息的JMS客戶。 JMS消費者:接收消息的JMS客戶。 JMS消息:包括可以在JMS客戶之間傳遞的數據的對象 JMS隊列:一個容納那些被發送的等待閱讀的消息的區域。一旦一個消息被閱讀,該消息將被從隊列中移走。 JMS主題:一種支持發送消息給多個訂閱者的機制。 # Java消息服務應用程序結構支持兩種模型 1. 點對點或隊列模型 在點對點或隊列模型下,一個生產者向一個特定的隊列發布消息,一個消費者從該隊列中讀取消息。這里,生產者知道消費者的隊列,并直接將消息發送到消費者的隊列 ![](https://box.kancloud.cn/fbd85470bba51f4176ada649592a6f73_768x133.png) 這種模式被概括為: 只有一個消費者將獲得消息 生產者不需要在接收者消費該消息期間處于運行狀態,接收者也同樣不需要在消息發送時處于運行狀態。 每一個成功處理的消息都由接收者簽收 2. 發布者/訂閱者模型 發布者/訂閱者模型支持向一個特定的消息主題發布消息。0或多個訂閱者可能對接收來自特定消息主題的消息感興趣。在這種模型下,發布者和訂閱者彼此不知道對方。這種模式好比是匿名公告板。 ![](https://box.kancloud.cn/6bfe2bec68ed77be9ca226e60e13798e_767x360.png) 這種模式被概括為: 多個消費者可以獲得消息 在發布者和訂閱者之間存在時間依賴性。發布者需要建立一個訂閱(subscription),以便客戶能夠訂閱。訂閱者必須保持持續的活動狀態以接收消息,除非訂閱者建立了持久的訂閱。在那種情況下,在訂閱者未連接時發布的消息將在訂閱者重新連接時重新發布。 ~~~ queue.put(object) 數據生產 queue.take(object) 數據消費 ~~~ # JMS核心組件 * Destination:消息發送的目的地,也就是前面說的Queue和Topic。 * Message :從字面上就可以看出是被發送的消息。 * StreamMessage:Java 數據流消息,用標準流操作來順序的填充和讀取 * MapMessage:一個Map類型的消息;名稱為 string 類型,而值為 Java 的基本類型。 * TextMessage:普通字符串消息,包含一個String。 * ObjectMessage:對象消息,包含一個可序列化的Java 對象 * BytesMessage:二進制數組消息,包含一個byte[]。 * XMLMessage: 一個XML類型的消息。 * Producer: 消息的生產者,要發送一個消息,必須通過這個生產者來發送。 * MessageConsumer: 與生產者相對應,這是消息的消費者或接收者,通過它來接收一個消息。 ![](https://box.kancloud.cn/7ee4f1ffecdc286f2f201c13544be12c_657x386.png) 通過與ConnectionFactory可以獲得一個connection 通過connection可以獲得一個session會話 # topic和queue區別 ## topic Topic實現publish和subscribe語義。 一條消息被publish時,它將發到所有感興趣的訂閱者,所以零到多個 subscriber(電腦詞匯中解釋為“用戶“)將接收到消息的一個拷貝。 但是在消息代理接收到消息時,只有激活訂閱的subscriber能夠獲得消息的一個拷貝 ## queue queue執行load balancer語義。 一條消息僅能被一個consumer收到。如果在message發送的時候沒有可用的consumer,那么它將被保存一直到能處理該message的consumer可用。 如果一個consumer收到一條message后卻不響應它,那么這條消息將被轉到另一個consumer 那兒。一個Queue可以有很多consumer,并且在多個可用的consumer中負載均衡 ## 區別 ![](https://box.kancloud.cn/950b6e937dbd3a99f75f3054a0a97020_648x506.png) ## 確認消息的方式 有三種 * AUTO_ACKNOWLEDGE(自動通知) * CLIENT_ACKNOWLEDGE(客戶端自行決定通知時機) * DUPS_OK_ACKNOWLEDGE(延時//批量通知) 如果使用的是 客戶端自行決定通知時機方式,那么需要在MessageListener里顯式調用`message.acknowledge()`來通知服務器。服務器接收到通知后采取相應的操作。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看