当前位置:首页 > 科技  > 软件

Stream帮你无感知切换消息中间件

来源: 责编: 时间:2024-01-24 09:02:56 298观看
导读哈喽,大家好,我是了不起。在实际的企业开发中,消息中间件是至关重要的组件之一。如常见的RabbitMQ和Kafka,这些中间件的差异性导致我们实际项目开发给我们造成了一定的困扰,这时候 Spring Cloud Stream 给我们提供了一种解

哈喽,大家好,我是了不起。5FW28资讯网——每日最新资讯28at.com

在实际的企业开发中,消息中间件是至关重要的组件之一。如常见的RabbitMQ和Kafka,这些中间件的差异性导致我们实际项目开发给我们造成了一定的困扰,这时候 Spring Cloud Stream 给我们提供了一种解耦合的方式。5FW28资讯网——每日最新资讯28at.com

简介

Spring Cloud Stream 由一个中间件中立的核组成。5FW28资讯网——每日最新资讯28at.com

应用通过 Spring Cloud Stream 插入的Input(相当于消费者Consumer,它是从队列中接收消息的)和Output(相当于生产者Producer,它是从队列中发送消息的。)通道与外界交流。5FW28资讯网——每日最新资讯28at.com

通道通过指定中间件的Binder实现与外部代理连接。5FW28资讯网——每日最新资讯28at.com

业务开发者不再关注具体消息中间件,只需关注Binder对应用程序提供的抽象概念来使用消息中间件实现业务即可。5FW28资讯网——每日最新资讯28at.com

详细介绍

核心概念

Spring Cloud Stream 为各大消息中间件产品提供了个性化的自动化配置实现,引用了发布-订阅、消费组、分区的三个核心概念。5FW28资讯网——每日最新资讯28at.com

Spring Cloud Stream 提供了很多抽象和基础组件来简化消息驱动型微服务应用。包含以下内容:5FW28资讯网——每日最新资讯28at.com

  • Spring Cloud Stream的应用模型
  • 绑定抽象
  • 持久化发布/订阅支持
  • 消费者组支持
  • 分片支持(Partitioning Support)
  • 可插拔API

应用模型

Spring Cloud Stream由一个中立的中间件内核组成。Spring Cloud Stream会注入输入和输出的channels,应用程序通过这些channels与外界通信,而channels则是通过一个明确的中间件Binder与外部brokers连接。5FW28资讯网——每日最新资讯28at.com

图片图片5FW28资讯网——每日最新资讯28at.com

各大消息中间件的绑定抽象

Spring Cloud Stream 提供对Kafka、Rabbit MQ、Redis、Gemfire的Binder实现。Spring Cloud Stream还包括了一个TestSupportBinder、TestSupportBinder预留一个未更改的channel以便于直接地、可靠地和channels通信。5FW28资讯网——每日最新资讯28at.com

分区支持

分区在有状态处理中是一个很重要的概念,其重要性体现在性能和一致性上,要确保所有相关数据被一并处理,例如,在时间窗平均计算的例子中,给定传感器测量结果应该都由同一应用实例进行计算。5FW28资讯网——每日最新资讯28at.com

Spring Cloud Stream支持在一个应用程序的多个实例之间数据分区,在分区的情况下,物理通信介质(例如,topic代理)被视为多分区结构。一个或多个生产者应用程序实例将数据发送给多个消费应用实例,并保证共同的特性的数据由相同的消费者实例处理。5FW28资讯网——每日最新资讯28at.com

Spring Cloud Stream 提供了一个通用的抽象,用于统一方式进行分区处理,因此分区可以用于自带分区的代理(如Kafka)或者不带分区的代理(如RabbieMQ)5FW28资讯网——每日最新资讯28at.com

编程模型

Spring Cloud Stream 提供了一些预定义的注解,用于绑定输入和输出channels,以及如何监听channels。5FW28资讯网——每日最新资讯28at.com

通过@EnableBinding触发绑定

将@EnableBinding注解添加到应用的配置类,就可以把一个spring应用转换成Spring Cloud Stream应用,@EnableBinding注解本身就包含@Configuration注解,会触发Spring Cloud Stream 基本配置。5FW28资讯网——每日最新资讯28at.com

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

@Input 与 @Output

一个Spring Cloud Stream应用可以有任意数目的input和output通道,后者通过@Input和@Output注解在接口中定义。5FW28资讯网——每日最新资讯28at.com

@StreamListener

定义在方法中,被修饰的方法注册为消息中间件上数据流的事件监听器,注解中属性值对应了监听的消息通道名。5FW28资讯网——每日最新资讯28at.com

Source、Sink和Processor

Spring Cloud Stream提供了三个开箱即用的预定义接口。5FW28资讯网——每日最新资讯28at.com

  • Source用于有单个输出(outbound)通道的应用。
public interface Source {  String OUTPUT = "output";  @Output(Source.OUTPUT)  MessageChannel output();}
  • Sink用于有单个输入(inbound)通道的应用。
public interface Sink {  String INPUT = "input";  @Input(Sink.INPUT)  SubscribableChannel input();}
  • Processor用于单个应用同时包含输入和输出通道的情况。
public interface Processor extends Source, Sink {}

极简实例

下面是一个非常简单的 SpringBootApplication应用,通过依赖Spring Cloud Stream,从Input通道监听消息然后返回应答到Output通道,只要添加配置文件就可以应用。5FW28资讯网——每日最新资讯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()));    }}

下面解释下这个示例中相关注解的应用:5FW28资讯网——每日最新资讯28at.com

  • @EnableBinding声明了这个应用程序绑定了2个通道:INPUT和OUTPUT。这2个通道是在接口Processor中定义的(Spring Cloud Stream默认设置)。所有通道都是配置在一个具体的消息中间件或绑定器中。
  • @StreamListener(Processor.INPUT)表明这里在input中提取消息,并且处理。
  • @SendTo(Processor.OUTPUT)表明在output中返回消息。

其他特性

消息发送失败的处理

消息发送失败后悔发送到默认的一个“topic.errors"的channel中(topic是配置的destination)。要配置消息发送失败的处理,需要将错误消息的channel打开。5FW28资讯网——每日最新资讯28at.com

消费者配置如下5FW28资讯网——每日最新资讯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 # 内容格式。这里使用 JSON          producer:            errorChannelEnabled: true

在启动类中配置错误消息的Channel信息5FW28资讯网——每日最新资讯28at.com

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

新建异常处理service5FW28资讯网——每日最新资讯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);    }}

当发生异常时,由于测试类中已经将异常捕获,处理发送异常主要是在这里进行。5FW28资讯网——每日最新资讯28at.com

总结

这篇文章根据 Spring Cloud Stream 的官方文档,对Stream做了一个整体的介绍,包括设计目标,应用场景,业务模型以及对外开放的注解,希望大家能够学以致用。5FW28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-66963-0.htmlStream帮你无感知切换消息中间件

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Python中最常用的十个内置函数!

下一篇: Ubuntu大佬神操作!Rust版Linux调度器秀麻了,性能远超C!

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • 如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • 让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • 重估百度丨“晚熟”的百度云,能等到春天吗?

    &copy;自象限原创作者|程心排版|王喻可2016年7月13日,百度云计算战略发布会在北京举行,宣告着百度智能云的正式启程。彼时的会场座无虚席,甚至排队排到了门外,在场的所有人几乎都
  • 由于成本持续增加,笔记本产品价格预计将明显上涨

    根据知情人士透露,由于材料、物流等成本持续增加,笔记本产品价格预计将在2021年下半年有明显上涨。进入6月下旬以来,全球半导体芯片缺货情况加剧,显卡、处理器
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
Top