JMS學習(一)基本概念

来源:http://www.cnblogs.com/macs524/archive/2016/07/08/5652011.html
-Advertisement-
Play Games

這兩天面試了一兩個公司,由於簡歷中的最近一個項目用到了JMS,然而面試官似乎對這個很感興趣,所以都被問到了,但可惜的是,我除了說我們使用了JMS外,面對他們提出的一些關於JMS的問題,我回答得相當差,直接結果就是面試失敗。同時我也深深的覺得自己對於技術的掌握是多麼的浮淺,本著從哪裡跌倒就從哪裡爬起來 ...


這兩天面試了一兩個公司,由於簡歷中的最近一個項目用到了JMS,然而面試官似乎對這個很感興趣,所以都被問到了,但可惜的是,我除了說我們使用了JMS外,面對他們提出的一些關於JMS的問題,我回答得相當差,直接結果就是面試失敗。同時我也深深的覺得自己對於技術的掌握是多麼的浮淺,本著從哪裡跌倒就從哪裡爬起來的心態,決定首先好好研究一下JMS。不僅是為面試,也是為了儘可能深入的掌握這個框架。

本文主要介紹一些基本的概念。

 

  • 一、JMS介紹

  JMS是Java Message Service 的簡稱,即Java消息服務。什麼是消息服務呢,我們來看一下Oracle官方的定義:

  The Java Message Service (JMS) API is a messaging standard that allows application components based on the Java Platform Enterprise Edition (Java EE) to create, send, receive, and read messages. It enables distributed communication that is loosely coupled, reliable, and asynchronous.

      翻譯過來就是說,JMS是一個消息標準,這種標準允許基於JavaEE的應用組件可以創建,發送,接受及讀取消息。通過JMS可以實現松耦合,可依賴及非同步的分散式通信。那麼在這一段話中我們應該註意兩點,即首先這是一個標準,類似於Servlet標準,並不是一個具體的實現。其次,這是一種分散式的通信機制,並且是非同步的。

  • 二、版本

      以前沒有註意過這個問題,但是沒想到在面試時居然被問題到了,問我們JMS協議使用的是哪個版本,回來查來下,JMS歷史上原來有兩個比較重要的版本。一個是JMS1.1,另一個就是JMS2.0。那麼這兩個版本之間有什麼區別呢?從網上找了一下答案,整理如下 :

     1. 簡化的API: JMS2.0 提供了一些簡化的API,可以簡化代碼編寫,以便於我們更方便的創建生產者消費者等內容。具體來說就是使用了JDK1.7的新語法

     2. 簡化配置:配置變得更方便

     3. 支持多個消費者共用Topic:,這一點很重要,因為我的項目中使用的是Topic,面試官問到說如何讓多個Node不重覆的消費同一個Topic的消息,其實,通過Topic共用就可以做到,這就是JMS2.0提供的特性,當然,1.1的話,通過selector好像是也可以做到。

      4. JMSXDeliveryCount值必須設置:這個值代表重試次數,正常來說是1,如果值大於1,則表示重發了多次。

 

      那麼,目前我們常用的MQ都支持哪個版本呢?以ActiveMQ為例來說,其官方文檔的說明如下:

      Apache ActiveMQ is fast, supports many Cross Language Clients and Protocols, comes with easy to use Enterprise Integration Patterns and many advanced features while fully supporting JMS 1.1 and J2EE 1.4. Apache ActiveMQ is released under the Apache2.0 License

      看來ActiveMQ還不支持JMS2.0,所以,我們目前使用的JMS的版本仍然還是1.1。那麼接下來的系列中,我們還是會以JMS1.1為主來介紹JMS的概念及使用。

  • 三、術語介紹

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

      1. 消息中間件(JMS Provider) : 指提供了對JMS協議的第三方組件,比如ActiveMQ就是一個消息中間件,另外比較知名的還有KFA, Rabbit MQ等。

      2. 消息模式:分為點對點(Point to Point,即P2P)和發佈/訂閱(Pub/Sub),對應的數據結構分別是隊列(Queue)和主題(Topic)

      3. 消息(Message): 通信內容的載體,其結構主要分為消息頭,屬性和消息體,並且根據存儲結構的不同分為好幾種,後面會詳細提到。

      4. 消息生產者:產生消息的一方,在P2P模式下,指消息發送者(Sender),在P/S模式下指消息發佈者(Publisher)

      5. 消息消費者:接收消息的一方,對應於兩種模式分別是消息接收者(Receiver)和消息訂閱者(Subscriber)

      在JMS的標準協議里,有幾個重要的介面,先簡單羅列如下:

      1. ConnectionFactory :創建Connection的工廠,通過這個對象來創建一個到某個消息服務的連接。

      2. Connection: 一個具體的連接,由ConnectionFactory創建

      3. Session: 由Connection創建的用於操作消息的介面,本介面可以直接用來創建消息的生產者對象

      4. Destination:消息存儲的位置,發送者把消息發送到指定位置,消費者從指定位置取消息,那麼這個指定位置可能是一個topic也可能是一個queue,由這個來表示。

      5. MessageProducer: 消息的生產者,包括QueueSender和TopicPublisher

      6. MessageConsumer: 消息的消費者, 包括QueueReceiver和TopicSubscriber

      7. MessageListener: 消息監聽器,這個是提供給消費者監聽消息使用的,在添加了某個監聽器之後,一旦消費到達,則會調用其onMessage方法。

 

  • 四、總結

 

       本文簡單的介紹了一下JMS的一些概念,對JMS有了一個初步的瞭解,後續文章會對本文介紹的一些術語和概念進行分部分詳細的介紹。

 

 

      

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Extjs Mvc模式下的整個MVC框架體系即下圖: 包含了Controller(實現方法層),Store(數據來源管理層),View(頁面佈局層)。之所以用MVC我想是因為減輕針對某一頁面的單一的JS 的開發,為啥呢,可以看一下沒有使用MVC模式的Extjs 的編碼: (因為我也是新手,所以可能里 ...
  • 為了使用方便,對Autofac container的簡單封裝,記錄如下,備以後用或分享給大家,歡迎討論! 使用方法如下: ...
  • MD5的加密方法很多,今天說下MD5的十六進位加密···先貼方法···· 根據方法 GetMD5就可以得到想要的MD5十六進位加密 ...
  • 是不是在安裝vs2010 vs2012 vs2013 vs2015的時候,好不容易安裝完成了,卻有一個警告:“xxxx,沒有驗證對象的數字簽名。”? 你用迅雷下載的安裝包有問題!!!你用迅雷下載的安裝包有問題!!!你用迅雷下載的安裝包有問題!!! 刪了它吧,沒有什麼好懷疑的,好留戀的,無論你重裝多少 ...
  • 相信每個人對註冊表並不陌生,在運行裡面輸入“regedit”就可以打開註冊表編輯器了。這東西對Windows系統來說可是比較重要的,也是病 毒常常會光顧的地方,比如病毒和惡意軟體常常會在註冊表的啟動項裡面寫入自己的啟動鍵值來達到自啟動的目的,有些病毒還會修改註冊表裡面來映像劫持殺毒軟 件,這是破壞系 ...
  • 本篇是講設計模式方面的,比較雜,不像書上的那樣。 我們先從很簡單的一個需求開始:“想讓系統中只存在一個SendEmailObject對象” 代碼: public class SendEmailObject { public bool Send() { Console.WriteLine("Email ...
  • 這段時間在做全國光電設計大賽,用到了px4的px4flow光流感測器,用軟體模擬iic讀取數據不定期會導致px4flow死機,查了資料和光流的源碼,發現這個光流用了stm32的硬體iic,所以對軟體模擬iic的時序要求可能更高一點所以在原子哥的iic程式上做了修改,代碼測驗後已經不會死機,做個筆記, ...
  • jQuery訪問json文件 ajax訪問json文件 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...