日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
初識Spring Cloud Stream,什么是消息驅(qū)動微服務框架

本文轉(zhuǎn)載自微信公眾號「 Java學習部落」,作者 Java學習部落 。轉(zhuǎn)載本文請聯(lián)系 Java學習部落公眾號。

Spring Cloud Stream 簡介

官方定義Spring Cloud Stream 是一個用來為微服務應用構建消息驅(qū)動能力的框架。它為一些供應商的消息中間件產(chǎn)品提供了個性化的自動化配置實現(xiàn),并且引入了發(fā)布-訂閱、消費組以及分區(qū)這三個核心概念。

Spirng Cloud Stream 本質(zhì)上就是整合了 Spring Boot 和 Spring Integration,實現(xiàn)一套輕量級的消息驅(qū)動的微服務框架。

通過使用 Spring Cloud Stream 可以有效簡化開發(fā)人員對消息中間件的使用復雜度,讓系統(tǒng)開發(fā)人員可以有更多的精力關注于核心業(yè)務邏輯的處理。

Spring Cloud Stream 基于 Spring Boot 實現(xiàn),所以它秉承了 Spring Boot 的優(yōu)點,自動化配置功能可以幫助我們快速上手使用。

不過 Spring Cloud Stream 目前只支持 RabbitMQ 和 Kafka 這兩個消息中間件的自動化配置。

相關知識點解讀

「1. 什么是事件驅(qū)動架構?」

如上圖所示,有時候系統(tǒng)中的某個服務會因為用戶操作或內(nèi)部行為發(fā)布一個事件,該服務知道這個事件在將來的某一個時間點會被其他服務所消費,但是并不知道這個服務具體是誰、也不關心什么時候被消費。同樣,消費該事件的服務也不一定需要知道該事件是由哪個服務所發(fā)布。

事件生產(chǎn)者和消費者之間的虛線代表的是一種相互松散、沒有直接調(diào)用的關聯(lián)關系。滿足以上特性的系統(tǒng)代表著一種松耦合的架構,通常被稱為事件驅(qū)動架構,而這里的事件也可以被理解是服務與服務之間發(fā)送的一種消息。事件驅(qū)動架構本質(zhì)上是一種架構設計風格,實現(xiàn)方法和工具有很多。在 Spring Cloud 家族中這個工具就是 Spring Cloud Stream。

其實,Spring Cloud Stream 是基于 Spring Integration 實現(xiàn)了消息發(fā)布和消費機制并提供了一層封裝,很多關于消息發(fā)布和消費的概念和實現(xiàn)方法本質(zhì)上都是依賴于 Spring Integration。而在 Spring Integration 的背后,則依賴于 Spring Messaging 組件來實現(xiàn)消息處理機制的基礎設施。

「2. 什么是 Spring Messaging?」

Spring Messaging 是 Spring Framework 中的一個模塊,其作用就是統(tǒng)一消息的編程模型。

每一個消息 Messaging 對應的模型就包括一個消息體 Payload 和消息頭 Header。

 
 
 
 
  1. package org.springframework.messaging; public interface Message { 
  2. T getPayload(); 
  3. MessageHeaders getHeaders();  

消息通道 MessageChannel 用于接收消息,調(diào)用 send 方法可以將消息發(fā)送至該消息通道中。

 
 
 
 
  1. @FunctionalInterface  
  2. public interface MessageChannel { 
  3.  long INDEFINITE_TIMEOUT = -1; 
  4.  default boolean send(Message message) { 
  5.    return send(message, INDEFINITE_TIMEOUT); 
  6.  } 
  7.  boolean send(Message message, long timeout);  

「消息通道里的消息如何被消費呢?」

由消息通道的子接口可訂閱的消息通道 SubscribableChannel 實現(xiàn),被 MessageHandler 消息處理器所訂閱:

 
 
 
 
  1. public interface SubscribableChannel extends MessageChannel { 
  2.  boolean subscribe(MessageHandler handler); 
  3.  boolean unsubscribe(MessageHandler handler);  

由MessageHandler 真正地消費/處理消息:

 
 
 
 
  1. @FunctionalInterface  
  2. public interface MessageHandler { 
  3.  void handleMessage(Message message) throws MessagingException;  

Spring Messaging 內(nèi)部在消息模型的基礎上衍生出了其它的一些功能,如:

  • 消息接收參數(shù)及返回值處理:消息接收參數(shù)處理器 HandlerMethodArgumentResolver 配合 @Header, @Payload 等注解使用;消息接收后的返回值處理器 HandlerMethodReturnValueHandler 配合 @SendTo 注解使用;
  • 消息體內(nèi)容轉(zhuǎn)換器 MessageConverter;
  • 統(tǒng)一抽象的消息發(fā)送模板 AbstractMessageSendingTemplate;
  • 消息通道攔截器 ChannelInterceptor;

「3.什么是Spring Integration?」

spring cloud stream是一個構建與Spring Boot和Spring Integration之上的框架,方便開發(fā)人員快速構建基于Message-Driven的系統(tǒng)。

Spring Integration & Enterprise Integration Patterns簡介

Enterprise Integration Patterns 是由Gregor Hohpe和Bobby Woolf在 Enterprise Integration Patterns 一書中總結的企業(yè)應用開發(fā)實踐中使用到的各系統(tǒng)間數(shù)據(jù)交換的方式。

Spring Integration是Spring框架對Enterprise Integration Patterns的實現(xiàn)和適配。

Spring Integration在基于Spring的應用程序中實現(xiàn)輕量級消息傳遞,并支持通過聲明適配器與外部系統(tǒng)集成。與Spring對遠程處理,消息傳遞和調(diào)度的支持相比,這些適配器提供了更高級別的抽象。

Spring Integration的主要目標是提供一個簡單的模型來構建企業(yè)集成解決方案,同時保持關注點的分離,這對于生成可維護的可測試代碼至關重要。

常見的企業(yè)集成數(shù)據(jù)傳遞模式有以下幾種:

文件傳輸:系統(tǒng)A采用FTP輪詢等方式獲取系統(tǒng)B生成的文件等。

共享數(shù)據(jù)庫:系統(tǒng)A和系統(tǒng)B共用一個數(shù)據(jù)庫表,共用實體類。

RPC調(diào)用:系統(tǒng)A和B暴露互相之間能調(diào)用的服務,例如SOAP、REST。

消息傳遞:系統(tǒng)A和系統(tǒng)B通過消息中間價交換數(shù)據(jù)。

Spring Cloud Stream 作用

無感知的使用消息中間件

Spring Cloud Stream解決了開發(fā)人員無感知的使用消息中間件的問題,因為Spring Cloud Stream對消息中間件的進一步封裝,可以做到代碼層面對中間件的無感知。

中間件和服務的高度解耦

Spring Cloud Stream進行了配置隔離,只需要調(diào)整配置,開發(fā)中可以動態(tài)的切換中間件(如rabbitmq切換為kafka),使得微服務開發(fā)的高度解耦,服務可以關注更多自己的業(yè)務流程。

Spring Cloud Stream 核心概念和應用模型

「主要概念」

Spring Cloud Stream 為各大消息中間件產(chǎn)品提供了個性化的自動化配置實現(xiàn),引用了發(fā)布-訂閱、消費組、分區(qū)的三個核心概念。

Spring Cloud Stream提供了很多抽象和基礎組件來簡化消息驅(qū)動型微服務應用。包含以下內(nèi)容:

  • Spring Cloud Stream的應用模型
  • 綁定抽象
  • 持久化發(fā)布/訂閱支持
  • 消費者組支持
  • 分片支持(Partitioning Support)
  • 可插拔API

「應用模型」

Spring Cloud Stream由一個中立的中間件內(nèi)核組成。

Spring Cloud Stream會注入輸入和輸出的channels,應用程序通過這些channels與外界通信,而channels則是通過一個明確的中間件Binder與外部brokers連接。

「Channel」

Channel描述的是消息從應用程序和Binder之間的流通的通道,也就是Application Model中的input和output。

「Binder」

Binder是Spring Cloud Stream中一個非常重要的概念,它是應用程序和消息中間件的中間層,完美屏蔽了不同消息中間件的實現(xiàn)差異,可以簡單的類比為Adapter。

Spring Cloud Stream官方提供了spring-cloud-stream-binder-kafka和spring-cloud-stream-binder-rabbit兩款主流消息中間件的Binder實現(xiàn)。并且還提供了專門用于測試的TestSupportBinder,開發(fā)者可以直接使用它來對通道的接收內(nèi)容進行斷言測試。

當然,Spring Cloud Stream也允許開發(fā)者通過它的SPI來實現(xiàn)其他MQ的Binder。目前已有多款MQ產(chǎn)品提供了第三方Binder實現(xiàn),參考官方文檔Binder Implementions。如要實現(xiàn)自己的Binder可以參考官方文檔Binder SPI。

「Bindings」

Binding是用于描述MQ中間件到應用程序的橋梁模型,即是對于Binder加上inputs和outputs各個channel的綁定關系的描述

「各大消息中間件的綁定抽象」

Spring Cloud Stream提供對Kafka,Rabbit MQ,Redis,和Gemfire的Binder實現(xiàn)。Spring Cloud Stream還包括了一個TestSupportBinder,TestSupportBinder預留一個未更改的channel以便于直接地、可靠地和channels通信。

「集成Kafka」

 
 
 
 
  1.  
  2.     org.springframework.cloud 
  3.     spring-cloud-stream-binder-kafka 
  4.    

「集成RabbitMQ」

 
 
 
 
  1.  
  2.     org.springframework.cloud 
  3.     spring-cloud-starter-stream-rabbit 
  4.  

「分區(qū)支持」

Spring Cloud Stream支持在一個應用程序的多個實例之間數(shù)據(jù)分區(qū),在分區(qū)的情況下,物理通信介質(zhì)(例如,topic代理)被視為多分區(qū)結構。一個或多個生產(chǎn)者應用程序?qū)嵗龑?shù)據(jù)發(fā)送給多個消費應用實例,并保證共同的特性的數(shù)據(jù)由相同的消費者實例處理。

Spring Cloud Stream提供了一個通用的抽象,用于統(tǒng)一方式進行分區(qū)處理,因此分區(qū)可以用于自帶分區(qū)的代理(如kafka)或者不帶分區(qū)的代理(如rabbiemq)

分區(qū)在有狀態(tài)處理中是一個很重要的概念,其重要性體現(xiàn)在性能和一致性上,要確保所有相關數(shù)據(jù)被一并處理,例如,在時間窗平均計算的例子中,給定傳感器測量結果應該都由同一應用實例進行計算。

Spring Cloud Stream 總結

本文是 Spring Cloud Stream 的第一篇,我們介紹了到底什么是Spring Cloud Stream以及相關知識點的解讀,幫助我們從整體上認識Spring Cloud Stream。


本文題目:初識Spring Cloud Stream,什么是消息驅(qū)動微服務框架
本文路徑:http://m.5511xx.com/article/dhidddo.html