日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

Stream幫你無(wú)感知切換消息中間件

來(lái)源: 責(zé)編: 時(shí)間:2024-01-24 09:02:56 226觀看
導(dǎo)讀哈嘍,大家好,我是了不起。在實(shí)際的企業(yè)開(kāi)發(fā)中,消息中間件是至關(guān)重要的組件之一。如常見(jiàn)的RabbitMQ和Kafka,這些中間件的差異性導(dǎo)致我們實(shí)際項(xiàng)目開(kāi)發(fā)給我們?cè)斐闪艘欢ǖ睦_,這時(shí)候 Spring Cloud Stream 給我們提供了一種解

哈嘍,大家好,我是了不起。Wli28資訊網(wǎng)——每日最新資訊28at.com

在實(shí)際的企業(yè)開(kāi)發(fā)中,消息中間件是至關(guān)重要的組件之一。如常見(jiàn)的RabbitMQ和Kafka,這些中間件的差異性導(dǎo)致我們實(shí)際項(xiàng)目開(kāi)發(fā)給我們?cè)斐闪艘欢ǖ睦_,這時(shí)候 Spring Cloud Stream 給我們提供了一種解耦合的方式。Wli28資訊網(wǎng)——每日最新資訊28at.com

簡(jiǎn)介

Spring Cloud Stream 由一個(gè)中間件中立的核組成。Wli28資訊網(wǎng)——每日最新資訊28at.com

應(yīng)用通過(guò) Spring Cloud Stream 插入的Input(相當(dāng)于消費(fèi)者Consumer,它是從隊(duì)列中接收消息的)和Output(相當(dāng)于生產(chǎn)者Producer,它是從隊(duì)列中發(fā)送消息的。)通道與外界交流。Wli28資訊網(wǎng)——每日最新資訊28at.com

通道通過(guò)指定中間件的Binder實(shí)現(xiàn)與外部代理連接。Wli28資訊網(wǎng)——每日最新資訊28at.com

業(yè)務(wù)開(kāi)發(fā)者不再關(guān)注具體消息中間件,只需關(guān)注Binder對(duì)應(yīng)用程序提供的抽象概念來(lái)使用消息中間件實(shí)現(xiàn)業(yè)務(wù)即可。Wli28資訊網(wǎng)——每日最新資訊28at.com

詳細(xì)介紹

核心概念

Spring Cloud Stream 為各大消息中間件產(chǎn)品提供了個(gè)性化的自動(dòng)化配置實(shí)現(xiàn),引用了發(fā)布-訂閱、消費(fèi)組、分區(qū)的三個(gè)核心概念。Wli28資訊網(wǎng)——每日最新資訊28at.com

Spring Cloud Stream 提供了很多抽象和基礎(chǔ)組件來(lái)簡(jiǎn)化消息驅(qū)動(dòng)型微服務(wù)應(yīng)用。包含以下內(nèi)容:Wli28資訊網(wǎng)——每日最新資訊28at.com

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

應(yīng)用模型

Spring Cloud Stream由一個(gè)中立的中間件內(nèi)核組成。Spring Cloud Stream會(huì)注入輸入和輸出的channels,應(yīng)用程序通過(guò)這些channels與外界通信,而channels則是通過(guò)一個(gè)明確的中間件Binder與外部brokers連接。Wli28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Wli28資訊網(wǎng)——每日最新資訊28at.com

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

Spring Cloud Stream 提供對(duì)Kafka、Rabbit MQ、Redis、Gemfire的Binder實(shí)現(xiàn)。Spring Cloud Stream還包括了一個(gè)TestSupportBinder、TestSupportBinder預(yù)留一個(gè)未更改的channel以便于直接地、可靠地和channels通信。Wli28資訊網(wǎng)——每日最新資訊28at.com

分區(qū)支持

分區(qū)在有狀態(tài)處理中是一個(gè)很重要的概念,其重要性體現(xiàn)在性能和一致性上,要確保所有相關(guān)數(shù)據(jù)被一并處理,例如,在時(shí)間窗平均計(jì)算的例子中,給定傳感器測(cè)量結(jié)果應(yīng)該都由同一應(yīng)用實(shí)例進(jìn)行計(jì)算。Wli28資訊網(wǎng)——每日最新資訊28at.com

Spring Cloud Stream支持在一個(gè)應(yīng)用程序的多個(gè)實(shí)例之間數(shù)據(jù)分區(qū),在分區(qū)的情況下,物理通信介質(zhì)(例如,topic代理)被視為多分區(qū)結(jié)構(gòu)。一個(gè)或多個(gè)生產(chǎn)者應(yīng)用程序?qū)嵗龑?shù)據(jù)發(fā)送給多個(gè)消費(fèi)應(yīng)用實(shí)例,并保證共同的特性的數(shù)據(jù)由相同的消費(fèi)者實(shí)例處理。Wli28資訊網(wǎng)——每日最新資訊28at.com

Spring Cloud Stream 提供了一個(gè)通用的抽象,用于統(tǒng)一方式進(jìn)行分區(qū)處理,因此分區(qū)可以用于自帶分區(qū)的代理(如Kafka)或者不帶分區(qū)的代理(如RabbieMQ)Wli28資訊網(wǎng)——每日最新資訊28at.com

編程模型

Spring Cloud Stream 提供了一些預(yù)定義的注解,用于綁定輸入和輸出channels,以及如何監(jiān)聽(tīng)channels。Wli28資訊網(wǎng)——每日最新資訊28at.com

通過(guò)@EnableBinding觸發(fā)綁定

將@EnableBinding注解添加到應(yīng)用的配置類,就可以把一個(gè)spring應(yīng)用轉(zhuǎn)換成Spring Cloud Stream應(yīng)用,@EnableBinding注解本身就包含@Configuration注解,會(huì)觸發(fā)Spring Cloud Stream 基本配置。Wli28資訊網(wǎng)——每日最新資訊28at.com

@Import(...)@Configuration@EnableIntegrationpublic @interface EnableBinding {    ...    Class<?>[] value() default {};}

@Input 與 @Output

一個(gè)Spring Cloud Stream應(yīng)用可以有任意數(shù)目的input和output通道,后者通過(guò)@Input和@Output注解在接口中定義。Wli28資訊網(wǎng)——每日最新資訊28at.com

@StreamListener

定義在方法中,被修飾的方法注冊(cè)為消息中間件上數(shù)據(jù)流的事件監(jiān)聽(tīng)器,注解中屬性值對(duì)應(yīng)了監(jiān)聽(tīng)的消息通道名。Wli28資訊網(wǎng)——每日最新資訊28at.com

Source、Sink和Processor

Spring Cloud Stream提供了三個(gè)開(kāi)箱即用的預(yù)定義接口。Wli28資訊網(wǎng)——每日最新資訊28at.com

  • Source用于有單個(gè)輸出(outbound)通道的應(yīng)用。
public interface Source {  String OUTPUT = "output";  @Output(Source.OUTPUT)  MessageChannel output();}
  • Sink用于有單個(gè)輸入(inbound)通道的應(yīng)用。
public interface Sink {  String INPUT = "input";  @Input(Sink.INPUT)  SubscribableChannel input();}
  • Processor用于單個(gè)應(yīng)用同時(shí)包含輸入和輸出通道的情況。
public interface Processor extends Source, Sink {}

極簡(jiǎn)實(shí)例

下面是一個(gè)非常簡(jiǎn)單的 SpringBootApplication應(yīng)用,通過(guò)依賴Spring Cloud Stream,從Input通道監(jiān)聽(tīng)消息然后返回應(yīng)答到Output通道,只要添加配置文件就可以應(yīng)用。Wli28資訊網(wǎng)——每日最新資訊28at.com

@SpringBootApplication@EnableBinding(Processor.class)public class ServiceApplication {    public static void main(String[] args) {        SpringApplication.run(MyLoggerServiceApplication.class, args);    }    @StreamListener(Processor.INPUT)    @SendTo(Processor.OUTPUT)    public LogMessage enrichLogMessage(LogMessage log) {        return new LogMessage(String.format("[1]: %s", log.getMessage()));    }}

下面解釋下這個(gè)示例中相關(guān)注解的應(yīng)用:Wli28資訊網(wǎng)——每日最新資訊28at.com

  • @EnableBinding聲明了這個(gè)應(yīng)用程序綁定了2個(gè)通道:INPUT和OUTPUT。這2個(gè)通道是在接口Processor中定義的(Spring Cloud Stream默認(rèn)設(shè)置)。所有通道都是配置在一個(gè)具體的消息中間件或綁定器中。
  • @StreamListener(Processor.INPUT)表明這里在input中提取消息,并且處理。
  • @SendTo(Processor.OUTPUT)表明在output中返回消息。

其他特性

消息發(fā)送失敗的處理

消息發(fā)送失敗后悔發(fā)送到默認(rèn)的一個(gè)“topic.errors"的channel中(topic是配置的destination)。要配置消息發(fā)送失敗的處理,需要將錯(cuò)誤消息的channel打開(kāi)。Wli28資訊網(wǎng)——每日最新資訊28at.com

消費(fèi)者配置如下Wli28資訊網(wǎng)——每日最新資訊28at.com

spring:  application:    name: spring-cloud-stream-producer  cloud:    stream:      rocketmq:        binder:          name-server: 127.0.0.1:9876        bindings:          output:            producer:              group: test              sync: true      bindings:        output:          destination: stream-test-topic          content-type: text/plain # 內(nèi)容格式。這里使用 JSON          producer:            errorChannelEnabled: true

在啟動(dòng)類中配置錯(cuò)誤消息的Channel信息Wli28資訊網(wǎng)——每日最新資訊28at.com

@Bean("stream-test-topic.errors")MessageChannel testoutPutErrorChannel(){    return new PublishSubscribeChannel();}

新建異常處理serviceWli28資訊網(wǎng)——每日最新資訊28at.com

import org.springframework.integration.annotation.ServiceActivator;import org.springframework.messaging.Message;import org.springframework.stereotype.Service;@Servicepublic class ErrorProducerService {    @ServiceActivator(inputChannel = "stream-test-topic.errors")    public void receiveProducerError(Message message){        System.out.println("receive error msg :"+message);    }}

當(dāng)發(fā)生異常時(shí),由于測(cè)試類中已經(jīng)將異常捕獲,處理發(fā)送異常主要是在這里進(jìn)行。Wli28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

這篇文章根據(jù) Spring Cloud Stream 的官方文檔,對(duì)Stream做了一個(gè)整體的介紹,包括設(shè)計(jì)目標(biāo),應(yīng)用場(chǎng)景,業(yè)務(wù)模型以及對(duì)外開(kāi)放的注解,希望大家能夠?qū)W以致用。Wli28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-66963-0.htmlStream幫你無(wú)感知切換消息中間件

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Python中最常用的十個(gè)內(nèi)置函數(shù)!

下一篇: Ubuntu大佬神操作!Rust版Linux調(diào)度器秀麻了,性能遠(yuǎn)超C!

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
  • 石頭智能洗地機(jī)A10 Plus體驗(yàn):雙向自清潔治好了我的懶癌

    一、前言和介紹專為家庭請(qǐng)假懶人而生的石頭科技在近日又帶來(lái)了自己的全新旗艦新品,石頭智能洗地機(jī)A10 Plus。從這個(gè)產(chǎn)品名上就不難看出,這次石頭推出的并不是常見(jiàn)的掃地機(jī)器
  • 5月安卓手機(jī)好評(píng)榜:魅族20 Pro奪冠

    性能榜和性價(jià)比榜之后,我們來(lái)看最后的安卓手機(jī)好評(píng)榜,數(shù)據(jù)來(lái)源安兔兔評(píng)測(cè),收集時(shí)間2023年5月1日至5月31日,僅限國(guó)內(nèi)市場(chǎng)。第一名:魅族20 Pro好評(píng)率:97.50%不得不感慨魅族老品牌還
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開(kāi)始學(xué)習(xí)反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無(wú)法成功對(duì)代碼進(jìn)行反混淆,尤其是使用自定義混淆器對(duì)其進(jìn)行混淆時(shí)。什么是混
  • 零售大模型“干中學(xué)”,攀爬數(shù)字化珠峰

    文/侯煜編輯/cc來(lái)源/華爾街科技眼對(duì)于絕大多數(shù)登山愛(ài)好者而言,攀爬珠穆朗瑪峰可謂終極目標(biāo)。攀登珠峰的商業(yè)路線有兩條,一是尼泊爾境內(nèi)的南坡路線,一是中國(guó)境內(nèi)的北坡路線。相
  • 消費(fèi)結(jié)構(gòu)調(diào)整丨巨頭低價(jià)博弈,拼多多還卷得動(dòng)嗎?

    來(lái)源:征探財(cái)經(jīng)作者:陳香羽隨著流量紅利的退潮,電商的存量博弈越來(lái)越明顯。曾經(jīng)主攻中高端與品質(zhì)的淘寶天貓、京東重拾&ldquo;低價(jià)&rdquo;口號(hào)。而過(guò)去與他們錯(cuò)位競(jìng)爭(zhēng)的拼多多,靠
  • 當(dāng)家的盒馬,加速謀生

    來(lái)源 | 價(jià)值星球Planet作者 | 歸去來(lái)自己&ldquo;當(dāng)家&rdquo;的盒馬,開(kāi)始加速謀生了。據(jù)盒馬官微消息,盒馬計(jì)劃今年開(kāi)放生鮮供應(yīng)鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經(jīng)與
  • 三星獲批量產(chǎn)iPhone 15全系屏幕:蘋(píng)果史上最驚艷直屏

    按照慣例,蘋(píng)果將繼續(xù)在今年9月舉辦一年一度的秋季新品發(fā)布會(huì),有傳言稱發(fā)布會(huì)將于9月12日舉行,屆時(shí)全新的iPhone 15系列將正式與大家見(jiàn)面,不出意外的話
  • iQOO Neo8系列今日官宣:首發(fā)天璣9200+ 全球安卓最強(qiáng)芯!

    在昨日舉行的的聯(lián)發(fā)科新一代旗艦芯片天璣9200+的發(fā)布會(huì)上,iQOO官方也正式宣布,全新的iQOO Neo8系列新品將全球首發(fā)搭載這款當(dāng)前性能最強(qiáng)大的移動(dòng)平臺(tái)
  • 由于成本持續(xù)增加,筆記本產(chǎn)品價(jià)格預(yù)計(jì)將明顯上漲

    根據(jù)知情人士透露,由于材料、物流等成本持續(xù)增加,筆記本產(chǎn)品價(jià)格預(yù)計(jì)將在2021年下半年有明顯上漲。進(jìn)入6月下旬以來(lái),全球半導(dǎo)體芯片缺貨情況加劇,顯卡、處理器
Top 主站蜘蛛池模板: 蓬安县| 长治市| 嘉荫县| 玛纳斯县| 蓬安县| 红原县| 盱眙县| 海晏县| 铜山县| 清流县| 临泽县| 陆川县| 土默特右旗| 深泽县| 青川县| 浪卡子县| 大余县| 丘北县| 天津市| 三穗县| 白河县| 宝清县| 亳州市| 沅陵县| 潮州市| 赤壁市| 林州市| 娄底市| 浦江县| 新巴尔虎右旗| 沐川县| 福清市| 大方县| 南部县| 集贤县| 全南县| 峨眉山市| 荆门市| 酉阳| 泰宁县| 宝丰县|