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

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

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

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

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

简介

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

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

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

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

详细介绍

核心概念

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

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

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

应用模型

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

图片图片7JQ28资讯网——每日最新资讯28at.com

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

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

分区支持

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

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

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

编程模型

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

通过@EnableBinding触发绑定

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

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

@Input 与 @Output

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

@StreamListener

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

Source、Sink和Processor

Spring Cloud Stream提供了三个开箱即用的预定义接口。7JQ28资讯网——每日最新资讯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通道,只要添加配置文件就可以应用。7JQ28资讯网——每日最新资讯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()));    }}

下面解释下这个示例中相关注解的应用:7JQ28资讯网——每日最新资讯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打开。7JQ28资讯网——每日最新资讯28at.com

消费者配置如下7JQ28资讯网——每日最新资讯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信息7JQ28资讯网——每日最新资讯28at.com

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

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

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

总结

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

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

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

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

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

标签:
  • 热门焦点
  • 一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    终于,在经过了几波预热之后,一加Ace2 Pro的外观真机图在网上出现了。还是博主数码闲聊站曝光的,这次的外观设计还是延续了一加11的方案,只是细节上有了调整,例如新加入了钛空灰
  • 石头智能洗地机A10 Plus体验:双向自清洁治好了我的懒癌

    一、前言和介绍专为家庭请假懒人而生的石头科技在近日又带来了自己的全新旗舰新品,石头智能洗地机A10 Plus。从这个产品名上就不难看出,这次石头推出的并不是常见的扫地机器
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 签约井川里予、何丹彤,单视频点赞近千万,MCN黑马永恒文希快速崛起!

    来源:视听观察永恒文希传媒作为一家MCN公司,说起它的名字来,可能大家会觉得有点儿陌生,但是说出来下面一串的名字之后,或许大家就会感到震惊,原来这么多网红,都签约这家公司了。根
  • 微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事&ldquo;起猛了,我能看得懂日语了&rdquo;。&ldquo;为什么日本人说话我能听懂?&rdquo;&ldquo;中文不像中文,日语不像日语,但是我竟然看懂了&rdquo;&hellip;&hell
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
  • 荣耀Magicbook V 14 2021曙光蓝版本正式开售,拥有触摸屏

    荣耀 Magicbook V 14 2021 曙光蓝版本正式开售,搭载 i7-11390H 处理器与 MX450 显卡,配备 16GB 内存与 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 键盘键程、
Top