JAVA 多用戶商城系統b2b2c-Spring Cloud Stream 介紹

介紹Spring Cloud Streamhtml

Spring Cloud Stream是構建消息驅動的微服務應用程序的框架。Spring Cloud Stream基於Spring Boot創建獨立的生產級Spring應用程序,並使用Spring Integration提供與消息代理的鏈接。它提供了來自幾家供應商的中間件的意見配置,介紹了持久發佈訂閱語義,消費者組和分區的概念。spring

您能夠將@EnableBinding註釋添加到應用程序,以便當即鏈接到消息代理,而且能夠將@StreamListener添加到方法中,以使其接收流處理的事件。如下是接收外部消息的簡單接收器應用程序。編程

@SpringBootApplication
@EnableBinding(Sink.class)
public class VoteRecordingSinkApplication {

  public static void main(String[] args) {
    SpringApplication.run(VoteRecordingSinkApplication.class, args);
  }

  @StreamListener(Sink.INPUT)
  public void processVote(Vote vote) {
      votingService.recordVote(vote);
  }
}

@EnableBinding註釋須要一個或多個接口做爲參數(在這種狀況下,該參數是單個Sink接口)。接口聲明輸入和/或輸出通道。Spring Cloud Stream提供了接口Source,Sink和Processor; 您還能夠定義本身的界面。app

如下是Sink接口的定義:框架

public interface Sink {
  String INPUT = "input";

  @Input(Sink.INPUT)
  SubscribableChannel input();
}

@Input註釋標識輸入通道,經過該輸入通道接收到的消息進入應用程序; @Output註釋標識輸出通道,發佈的消息將經過該通道離開應用程序。@Input和@Output註釋可使用頻道名稱做爲參數; 若是未提供名稱,將使用註釋方法的名稱。微服務

Spring Cloud Stream將爲您建立一個界面的實現。您能夠在應用程序中經過自動鏈接來使用它,以下面的測試用例示例。測試

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = VoteRecordingSinkApplication.class)
@WebAppConfiguration
@DirtiesContext
public class StreamApplicationTests {

  @Autowired
  private Sink sink;

  @Test
  public void contextLoads() {
    assertNotNull(this.sink.input());
  }
}

編程模型 this

Binder代理

Binder 是 Spring Cloud Stream 的一個抽象概念,是應用與消息中間件之間的粘合劑。
目前 Spring Cloud Stream 實現了 Kafka 和 Rabbit MQ 的binder。經過 binder ,能夠很方便的鏈接中間件,能夠動態的改變消息的destinations(對應於 Kafka 的topic,Rabbit MQ 的 exchanges),這些均可以經過外部配置項來作到。甚至能夠任意的改變中間件的類型而不須要修改一行代碼。code

Publish-Subscribe

消息的發佈(Publish)和訂閱(Subscribe)是事件驅動的經典模式。Spring Cloud Stream 的數據交互也是基於這個思想。生產者把消息經過某個 topic 廣播出去(Spring Cloud Stream 中的 destinations)。其餘的微服務,經過訂閱特定 topic 來獲取廣播出來的消息來觸發業務的進行。

這種模式,極大的下降了生產者與消費者之間的耦合。即便有新的應用的引入,也不須要破壞當前系統的總體結構。

Consumer Groups

「Group」, Kafka 中的概念。Spring Cloud Stream 的這個分組概念的意思基本和 Kafka 一致。

微服務中動態的縮放同一個應用的數量以此來達到更高的處理能力是很是必須的。對於這種狀況,同一個事件防止被重複消費,只要把這些應用放置於同一個 「group」 中,就可以保證消息只會被其中一個應用消費一次。

Message

Message,就是所說的消息體,用來承載傳輸的信息用的。Message分爲兩部分,header和payload。header是頭部信息,用來存儲傳輸的一些特性屬性參數。payload是用來裝載數據的,他能夠攜帶的任何Object對象 不一樣的對象在binder中傳輸 能夠指定不一樣的mini類型 具體參考

http://cloud.spring.io/spring...

能夠經過application.yml中設置 輸入input和輸出output的mini類型

spring.cloud.stream.bindings..content-type

MessageChannel

消息管道,生產者生產一個消息到channel,消費者從channel消費一個消息,因此channel能夠對消息組件解耦,而且提供一個方便的攔截功能和監控功能。
默認的通道

輸入(SubscribableChannel)和輸出通道(MessageChannel)參考 Processor接口

springcloudstream提供通道的定義 好比自定義經過可使用接口

public interface OrderChannel {

   String INPUT = "input_order";
   String OUTPUT="ouput_order";
   /**
    * input註解制定通道的名稱  未來在yml中配置該通道的實際綁定的topic或者訂閱組
    * @return
    */
   @Input(INPUT)
   SubscribableChannel orderInput();
   /**
    * output註解指定輸出通道的名稱
    * @return
    */
   @Output(OUTPUT)
   MessageChannel orderOutput();
}

如下 代碼參考 Source Sink Processor接口 未來在yml關於該通道的配置既能夠

spring: 
    cloud: 
        stream: 
            bindings: 
                通道名稱: 
                    destination: mydest

電子商務社交平臺源碼請加企鵝求求:三五三六二四七二五九

相關文章
相關標籤/搜索