【王程斯】IBM Message Broker筆記系列(二)
【王程斯】IBM Message Broker筆記系列(二)
IBM Message Broker筆記系列(二)
趕在這周結束前,再寫一篇
MB概述
MB的全稱是message broker,即“消息代理”。“消息”一詞前幾年比較火,消息中間件也賣的很火,當時似乎J2EE的產品都要跟“消息”、“中間件”扯上點關系,以彰顯潮流。我覺得初學者只需記住“消息”的異步性即可,也就是“消息”和傳統的網絡連接、遠程方法調用等的最大區別,就是你一旦發出消息以后,不用再管它的死活,中間件會處理一切事務,出了問題也會通知你,這樣可以更好的分離業務邏輯。把消息當成郵件的話,那么傳統網絡連接就是由你去送信,而中間件則好比郵局,它來提供送信服務,并且可以跨國境、跨語言,完全不用你操心(相當于中間件可以連接異構平臺),使用者只需等在家門口收信。
在說“代理”之前,先講一下MQ的基本概念。MQ即message queue,消息隊列,也就是IBM的主打消息中間件產品,IBM幾乎所有SOA相關的產品,都是構建于MQ之上的,沒有MQ強大的消息傳輸能力,那么IBM很多產品都做不起來。在這里不贅述MQ的功能,初學者只需把MQ當成一個非??煽康膫鬏斖ǖ兰纯?,你只要往里面放東西,MQ就會把消息傳到目的地。
那有了強大的MQ還要“代理”干什么呢?如果你用過MQ,或者類似的產品如apache的開源JMS產品“ActiveMQ”,就會發現,盡管用MQ不必考慮網絡連接、平臺異構,但是你在配置的時候、以及使用MQ編程的時候,都要指定目的地,比如設置IP地址。這樣的程序依舊存在很大耦合性,萬一某個組件的IP變了,所有跟他相關的組件都得改動,輕則修改配置文件、重則重寫代碼。這時“代理”的作用就開始凸顯了。
所有組件的MQ隊列都可以直接連接到MB上,MB相當于一個公共服務中心。MB接收所有消息,然后自動分析其中的內容,找到相應的目的地,進行路由轉發,好比你在寫信時,只需寫明收信人的姓名、身份證,哪怕收信人搬到天涯海角,只要他在MB郵局中登記了,那MB就可以把信交給他,這樣進一步地分離了業務和底層通信,我只需要知道業務概念上的“他”,就可以把消息交給他。此外,MB還可以進行消息轉換,這就像是自動翻譯信件,我現在可以用中文寫封信給本拉登,我不需要知道他具體藏在哪里,信件就會自動翻譯成阿富汗的文字,送到本拉登手里。
所以,代理的兩個核心功能就是:“消息路由”和“消息格式轉換”。MB本質上也是一個服務總線,所有的服務組件接入到MB中,服務將消息塞給MB,MB來決定怎么轉發,這樣讓服務愈加成為一個獨立的實體,和其他服務的耦合性進一步降低,從而達到SOA的境界。
MB初覽
說了那么多大道理,終于開始講到MB的具體內容了。下面的圖片摘自IBM的紅皮書,是MB的總體架構,我粗略的描述一下。
可以看到,MB里面有兩大塊內容,一個是toolkit,也就是開發環境,后面我們會講到;還有一個是broker domain,即代理域。代理域里面有兩個核心部件,一個是配置管理器configuration manager,一個是代理broker。
配置管理器其實很像MQ的隊列管理器,或者是WAS的deployment manager,都是起到一個管理作用,在MB里當然是管理眾多的broker了。我們平時對broker的管理、維護操作,其實都是通過配置管理器完成的。
代理broker是真正體現MB設計思想的地方,上面的圖片中有像流程圖一樣的東西,即message flow,是消息的流程圖(從什么地方流進來,再從什么地方流出去);還有message set,即消息集,說白了是描述消息長什么樣子,它的結構、內容是怎樣的。其實,message flow對應了上文所說的“消息路由”,而message set則對應“消息格式轉換”,你肯定要清楚兩種消息的格式,才能定義互相轉換的規則。
MB的外圍是各種類型的應用程序,他們接入MB的方式可以多種多樣,可以是Webservice,也可以是數據庫、文件、HTTP連接,等等,不一定局限于MQ
圓柱體代表的則是數據庫了,這是盡IT人皆知的。因為MB的很多信息,包括配置信息、以及broker的運行時信息都要通過數據庫保存。broker本身也可以操作數據庫,你可以在流程的某個節點上增刪查改某個數據庫
下圖是WMBT(websphere mb toolkit)的界面
可以看到,WMBT是基于eclipse的,所以大部分java開發者應該能很快上手。開發MB程序和開發J2EE程序差不多,也是先新建一個項目,然后編輯,最后部署。
1號區域是一個消息流,可以看到非常直觀:從MQ讀入——計算(轉換成web service格式)——發送http請求到web service的url——計算(轉換回MQ消息格式)——放入MQ
2號區域是節點選擇面板,MB自帶了幾十種節點給我們選擇,同時我們也可以自己創建節點
3號區域是屬性面板,當你選擇某個節點時,可以在其中編輯節點的屬性
4號區域是域連接面板,開發好的消息流和消息格式,必須首先在MBT中連接到對應的配置管理器,再將打包好的流程部署到對應的broker中,這個過程也可以由命令行完成
5號區域則類似eclipse的項目集合,里面是所有的MB項目
總結
還是打個比方。首先,我們把MB看做一個功能超級強大的路由器,它支持多種接入方式,也就是MB路由器上的端口有很多種,MQ是比較常用的一種方式,所以MQ就像常用的RJ45接口的5類雙絞線。但同時MB還支持JMS、SCADA等各類接入標準。在MB內部,我們管理員定義好路由規則(編寫消息流)。其次,從MQ過來的信號,可以轉換成其他網絡協議的信號(消息格式轉換),這類似于網橋功能,可以跨越不同網絡。同時,MB的性能非常好,可以進行大數據量交換,這一點又很像是交換機。最后,MB可以理解業務邏輯,它的路由不僅像路由器那樣針對消息頭進行路由,還可以根據消息的業務內容進行路由,酷似應用網關。
趕在這周結束前,再寫一篇
MB概述
MB的全稱是message broker,即“消息代理”。“消息”一詞前幾年比較火,消息中間件也賣的很火,當時似乎J2EE的產品都要跟“消息”、“中間件”扯上點關系,以彰顯潮流。我覺得初學者只需記住“消息”的異步性即可,也就是“消息”和傳統的網絡連接、遠程方法調用等的最大區別,就是你一旦發出消息以后,不用再管它的死活,中間件會處理一切事務,出了問題也會通知你,這樣可以更好的分離業務邏輯。把消息當成郵件的話,那么傳統網絡連接就是由你去送信,而中間件則好比郵局,它來提供送信服務,并且可以跨國境、跨語言,完全不用你操心(相當于中間件可以連接異構平臺),使用者只需等在家門口收信。
在說“代理”之前,先講一下MQ的基本概念。MQ即message queue,消息隊列,也就是IBM的主打消息中間件產品,IBM幾乎所有SOA相關的產品,都是構建于MQ之上的,沒有MQ強大的消息傳輸能力,那么IBM很多產品都做不起來。在這里不贅述MQ的功能,初學者只需把MQ當成一個非??煽康膫鬏斖ǖ兰纯?,你只要往里面放東西,MQ就會把消息傳到目的地。
那有了強大的MQ還要“代理”干什么呢?如果你用過MQ,或者類似的產品如apache的開源JMS產品“ActiveMQ”,就會發現,盡管用MQ不必考慮網絡連接、平臺異構,但是你在配置的時候、以及使用MQ編程的時候,都要指定目的地,比如設置IP地址。這樣的程序依舊存在很大耦合性,萬一某個組件的IP變了,所有跟他相關的組件都得改動,輕則修改配置文件、重則重寫代碼。這時“代理”的作用就開始凸顯了。
所有組件的MQ隊列都可以直接連接到MB上,MB相當于一個公共服務中心。MB接收所有消息,然后自動分析其中的內容,找到相應的目的地,進行路由轉發,好比你在寫信時,只需寫明收信人的姓名、身份證,哪怕收信人搬到天涯海角,只要他在MB郵局中登記了,那MB就可以把信交給他,這樣進一步地分離了業務和底層通信,我只需要知道業務概念上的“他”,就可以把消息交給他。此外,MB還可以進行消息轉換,這就像是自動翻譯信件,我現在可以用中文寫封信給本拉登,我不需要知道他具體藏在哪里,信件就會自動翻譯成阿富汗的文字,送到本拉登手里。
所以,代理的兩個核心功能就是:“消息路由”和“消息格式轉換”。MB本質上也是一個服務總線,所有的服務組件接入到MB中,服務將消息塞給MB,MB來決定怎么轉發,這樣讓服務愈加成為一個獨立的實體,和其他服務的耦合性進一步降低,從而達到SOA的境界。
MB初覽
說了那么多大道理,終于開始講到MB的具體內容了。下面的圖片摘自IBM的紅皮書,是MB的總體架構,我粗略的描述一下。

可以看到,MB里面有兩大塊內容,一個是toolkit,也就是開發環境,后面我們會講到;還有一個是broker domain,即代理域。代理域里面有兩個核心部件,一個是配置管理器configuration manager,一個是代理broker。
配置管理器其實很像MQ的隊列管理器,或者是WAS的deployment manager,都是起到一個管理作用,在MB里當然是管理眾多的broker了。我們平時對broker的管理、維護操作,其實都是通過配置管理器完成的。
代理broker是真正體現MB設計思想的地方,上面的圖片中有像流程圖一樣的東西,即message flow,是消息的流程圖(從什么地方流進來,再從什么地方流出去);還有message set,即消息集,說白了是描述消息長什么樣子,它的結構、內容是怎樣的。其實,message flow對應了上文所說的“消息路由”,而message set則對應“消息格式轉換”,你肯定要清楚兩種消息的格式,才能定義互相轉換的規則。

MB的外圍是各種類型的應用程序,他們接入MB的方式可以多種多樣,可以是Webservice,也可以是數據庫、文件、HTTP連接,等等,不一定局限于MQ
圓柱體代表的則是數據庫了,這是盡IT人皆知的。因為MB的很多信息,包括配置信息、以及broker的運行時信息都要通過數據庫保存。broker本身也可以操作數據庫,你可以在流程的某個節點上增刪查改某個數據庫
下圖是WMBT(websphere mb toolkit)的界面

可以看到,WMBT是基于eclipse的,所以大部分java開發者應該能很快上手。開發MB程序和開發J2EE程序差不多,也是先新建一個項目,然后編輯,最后部署。
1號區域是一個消息流,可以看到非常直觀:從MQ讀入——計算(轉換成web service格式)——發送http請求到web service的url——計算(轉換回MQ消息格式)——放入MQ
2號區域是節點選擇面板,MB自帶了幾十種節點給我們選擇,同時我們也可以自己創建節點
3號區域是屬性面板,當你選擇某個節點時,可以在其中編輯節點的屬性
4號區域是域連接面板,開發好的消息流和消息格式,必須首先在MBT中連接到對應的配置管理器,再將打包好的流程部署到對應的broker中,這個過程也可以由命令行完成
5號區域則類似eclipse的項目集合,里面是所有的MB項目
總結
還是打個比方。首先,我們把MB看做一個功能超級強大的路由器,它支持多種接入方式,也就是MB路由器上的端口有很多種,MQ是比較常用的一種方式,所以MQ就像常用的RJ45接口的5類雙絞線。但同時MB還支持JMS、SCADA等各類接入標準。在MB內部,我們管理員定義好路由規則(編寫消息流)。其次,從MQ過來的信號,可以轉換成其他網絡協議的信號(消息格式轉換),這類似于網橋功能,可以跨越不同網絡。同時,MB的性能非常好,可以進行大數據量交換,這一點又很像是交換機。最后,MB可以理解業務邏輯,它的路由不僅像路由器那樣針對消息頭進行路由,還可以根據消息的業務內容進行路由,酷似應用網關。