三、message channel詳述
message channel用來將多個訊息端點(message endpoint)連線在一起,message channel可以保障訊息可以安全的在多個訊息端點(message endpoint)之間進行收發。為了message channel可以更容易的和message endpoint進行互動,每個message channel都擁有乙個唯一的名稱(標識),所以每個message channel都可以看作是乙個邏輯上的位址。不同型別的message channel對訊息的處理會表現出不同處理方式,以下是幾種主要型別的message channel的介紹:
1、point-to-point channel(點對點型別的訊息通道)
point-to-point channel會保證在任何時候,傳送者傳送的同乙個訊息都只有乙個接收者。spring integration 提供了幾種點對點型別通道的實現queuechannel,prioritychannel,rendezvouschannel,directchannel,executorchannel,and nullchannel。
2、publish-subscribe channel(訂閱發布型別通道)
發布訂閱通道允許生產者和消費者之間是一對多的關係。所以多個消費這可以接收同乙個訊息;當所有的訂閱了該訊息的消費者都消費了該訊息後訊息會被標記為已接受並且從通道中刪除。spring integration 提供了publishsubscribechannel型別來實現此種通道。
3、data-typed channel(這個比較抽象,我自己理解為 「型別依賴通道」)
為了能夠正確的處理訊息,訊息的接收者必須確切的知道所要處理的訊息資料的資料型別(payload的資料型別);例如:某個訊息傳送者可以傳送攜帶a型別資料訊息, 也可以傳送攜帶b型別資料的訊息,並且會把這兩種型別的訊息傳送到同乙個message channel,此時訊息的傳送者可以通過 在訊息頭或者訊息的某個部分設定乙個指定格式的標識來判斷message channel中的訊息所攜帶的到底是a型別還是b型別的資料;但是,還有一種情況就是,有兩個message channel,乙個只能接受攜帶a型別資料的訊息,另乙個只能接受攜帶b型別資料的訊息,那麼此時接收者就無需通過上面的方式進行判斷了。這種只能接受單一型別資料的message channel被稱為是data-typed channel。spring integration 通過類似下面的配置來指定message channel是否可以處理多種訊息負載型別,例如:
配置,指定了message channel可以接受任何資料型別,而配置,指定訊息通道只能接受唯一的一種型別a.a。
4、invalid message channel (無效訊息通道)
當應用從message channel接受一條訊息時候,如果該訊息的資料沒有通過認證或者這個message channel無法支援這條資料的訊息型別,應用程式將會拒絕處理該條訊息,該條訊息將會被路由到invalid message channel,以便其他處理程式或者應用對其進行更進一步的處理。在spring integration中通過filter實現該驗證。
5、dead letter channel(忽略訊息通道,或者理解無死訊息通道)
如果應用程式使用所有可以使用的方式都無法將一條訊息放入message channel,該條訊息將會被傳送到dead letter channel,以便其他的處理程式或者其他系統中能夠對該條訊息進行監聽的訊息通道進行處理。
6、channel adapter(通道適配)
channel adapter允許應用程式連線到乙個訊息系統。大部分的應用程式最初設計的時候都沒有設計成可以同訊息系統進行通訊的應用,通過使用乙個通用的介面或者應用程式程式設計介面(channel adapter),應用程式可以很容易的與不同的訊息系統實現進行整合。
7、messaging bridge(訊息橋接)
messaging bridge是簡單的連線兩個訊息通道或者訊息介面卡。例如:開發者或許會希望能夠將乙個支援池化的通道連線到乙個訂閱發布通道上,以便訂閱端點可以不去考慮任何池化的配置就可以實現池化能力。這種情況可以用訊息橋接來實現。
8、message bus(訊息匯流排)
在企業整合系統中,將通用資料模型,通用命令集,通過一組共享介面允許不同系統之間進行通訊的可訊息化基礎架構 組合在一起就稱為message bus。在 spring integration 中可以通過使用adapter和transformer,message channel可以連線和建立乙個允許在不同系統間進行通訊的訊息匯流排。
9、guaranteed delivery(固化訊息或者理解為儲存訊息)
直到被訊息系統傳送前,訊息都是被儲存在記憶體中的,如果訊息系統當機所有的訊息將會丟失,為了保證訊息的傳送,訊息系統可以使用某種資料儲存固化訊息。預設情況下 spring integration通道也是將訊息儲存在記憶體中,spring integration2.0以後,訊息通道可以使用jms broker來備份訊息。換句話說訊息是被儲存在應用記憶體中的乙個jms broker例項中的。訊息通道使用介面策略根據不同的需求對訊息固化進行定製。可以通過實現messagestore介面委託任何型別的可用儲存裝置來固化訊息,如果需要更多的固化控制甚至可以通過實現message channel 來進行設計。
Spring Integration學習筆記 簡介
本文是自己學習的總結筆記,主要學習資料如下。唉,到了新公司,發現公司用的是spring integration框架,被迫學習。學習資料實在太少,integration系列的學習筆記的參考資料基本都在自與官方文件,有些部分都是在翻譯文件內容。spring integration也是spring 全家桶...
Spring Integration基本用法
關於spring integration的介紹這裡不需要贅述,現在我們需要實現的是傳送乙個param,裡面有兩個引數datatype和data,datatype是0和1除外的捨棄,剩餘datatype 0的資料往oldchannel通道發,剩餘datatype 1的資料往newchannel通道發,...
學習筆記 雜湊學習筆記
hash基本原理 hash就是乙個像函式一樣的東西,你放進去乙個值,它給你輸出來乙個值。輸出的值就是hash值。一般hash值會比原來的值更好儲存 更小 或比較。那字串hash就非常好理解了。就是把字串轉換成乙個整數的函式。而且要盡量做到使字串對應唯一的hash值。它的主要思路是選取恰當的進製,可以...