Spring Cloud Stream

Spring Cloud 应用篇 之 Spring Cloud Stream(消息驱动) (一)简介Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架。它可以基于 Spring Boot 来创建独立的、可用于生产的 Spring 应用程序。Spring Cloud Stream 为一些供应商的消息中间件产品提供了个性化的自动化配置实现,并引入了发布-订阅、消费组、分区这三个核心概念。通过使用 Spring Cloud Stream,可以有效简化开发人员... 阅读详情

Spring Cloud Stream

简介

Spring Cloud Stream 是一个为微服务构建消息驱动能力的框架。整合了Spring Boot和Spring Integration,实现了一套轻量级的消息驱动的微服务架构。有效的简化了开发人员对消息中间件的使用复杂度,让开发人员有更多的精力去关注于核心业务代码。

快速入门

1.创建Spring Boot 项目,命名stream-demo,pom.xml中添加如下依赖

   <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-stream-binder-kafka</artifactId>
   </dependency>

2.创建自定义通道接口,SendAndReceive

    public interface SendAndReceive{
        
        String SEND1 = "send1";

        String SEND2 = "send2";

        String SEND3 = "send3";

        String INPUT1 = "INPUT1";

        String INPUT2 = "INPUT2";

        String INPUT3 = "INPUT3";

        @Input(SendAndReceive.INPUT1)
        SubscribableChannel input1();

        @Input(SendAndReceive.INPUT2)
        SubscribableChannel input2();

        @Input(SendAndReceive.INPUT3)
        SubscribableChannel input3();

        @Output(SendAndReceive.SEND1)
        MessageChannel send1();

        @Output(SendAndReceive.SEND2)
        MessageChannel send2();

        @Output(SendAndReceive.SEND3)
        MessageChannel send3();
    }

3.创建消息接收发送类

    @EnableBinding(SendAndReceive.class)
    @WebAppConfiguration
    public class ReciverAndSend{

        @Autowired
        private SendAndReceive sendAndReceive;

        @StreamListener(Sink.INPUT1)
        public void revice1(Object payload){
            ...
        }

        @StreamListener(Sink.INPUT2)
        public void revice2(Object payload){
            ...
        }

        @StreamListener(Sink.INPUT3)
        public void revice3(Object payload){
            ...
        }

        public void send1(){
            sendAndReceive.send1().send(MessageBuilder.withPayload("内容").build())
        }

        public void send2(){
            sendAndReceive.send2().send(MessageBuilder.withPayload("内容").build())
        }

         public void send3(){
            sendAndReceive.send2().send(MessageBuilder.withPayload("内容").build())
        }

    }

4.创建服务启动类

  @SpringBootApplication
  public class Application {

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

  }

5.配置文件中添加如下配置

    spring.cloud.stream.defaultBinder: 配置默认绑定器,比如kafka
    spring.cloud.stream.bindings.input1.group: 为具体通道绑定分组名,通常设置成服务名
    spring.cloud.stream.bindings.input1.destination: 设置具体通道消费主题
    spring.cloud.stream.bindings.output1.destination: 设置具体通道输出消息的主题
    spring.cloud.stream.bindings.input1.content-type: 设置输入通道MIME类型
    spring.cloud.stream.kafka.binder.brokers: 配置kafka地址
    ...

核心概念

Spring Cloud Stream构建的应用程序与消息中间件之间通过绑定器Binder相关联,绑定器相对于应用程序而言起到了隔离作用,它使得不同消息中间件的实现细节对应用程序是透明的,我们只需要使用Binder提供的抽象概念来使用消息中间件,这个抽象概念就是Channel。
.. image: ./image/spring-cloud-stream.jpeg

绑定器

绑定器通过channel通道完美的实现了应用程序与消息中间件细节之间的隔离解耦,对于更换消息中间件只需要更换对应的Binder绑定器而不用需改任何代码逻辑。

发布订阅模式

Spring Cloud Stream中的消息通信方式遵循发布-订阅模式,当一条消息投递到消息中间件后,会通过共享的Topic主题进行广播,消息订阅者接收消息并触发自身逻辑。

消息分组

spring.cloud.stream.bindings.input.group可以为应用实例指定分组,如果不显示为应用指定分组,Spring Cloud Stream将为其分配一个独立的匿名消费组。对于同一个Topic下同一分组的应用实例只有一个会消费。

消息分区

通过消息分区可以实现当生产者将消息数据发送给多个消费者实例时,保证拥有相同特征的消息数据始终是由同一个消费者实例接收处理,

spring cloud stream kafka 集成 spring cloud stream kafka 集成 有完整demo 第一步:需要引入如下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 阅读详情

相关推荐

Spring Cloud Stream整合RocketMQ

Spring Cloud Stream是一个框架,用于构建与共享消息系统连接的高度可扩展的事件驱动微服务。该框架提供了一个灵活的编程模型,该模型基于已经建立和熟悉的Spring习惯用法和最佳实践,包括对持久pub/sub语义、消费者组和有状态分区的支持。:负责提供与外部消息传递系统集成的组件。:外部消息系统和最终用户提供的应用程序代码(生产者/消费者)之间的桥梁。Message:生产者和消费者用来与目标绑定器(以及通过外部消息系统的其他应用程序)进行通信的规范数据结构。

冲出仁川,走出马德里,故事还会再继续 2940

如何为CloudStream贡献多语言翻译:从入门到精通的完整指南

CloudStream是一款功能强大的Android媒体流播放与下载应用,支持用户轻松观看和下载各类媒体内容。作为开源项目,其多语言支持依赖全球开发者的贡献。本文将带你从零开始,一步步完成翻译贡献的全过程,帮助CloudStream走向更广阔的国际市场。 [![CloudStream多语言支持背景图](https://raw.gitcode.com/GitHub_Trending/cl/clou

gitblog_01139的博客 691

Spring Cloud Stream 深度解析

Spring Cloud Stream是一个轻量级的事件驱动框架,可以帮助开发人员构建微服务应用、SOA应用程序。它基于Spring Boot实现了简单易用的消息流绑定能力。概念及术语使用场景运行流程配置及参数源码分析测试用例未来发展方向Spring Cloud Stream是一个轻量级的事件驱动框架,它允许开发人员通过声明性方法来创建消费和产生事件。在这种机制下,应用程序无需显式地连接到Message Broker(即中间件),消息从生产者发送到消费者,并最终被消费者处理完毕。

AI天才研究院 1803

SpringCloud Stream 没人用?

简介SpringCloud Stream 是一个用于构建与共享消息系统连接的高度可扩展的事件驱动微服务组件。它提供了一个灵活的编程模型,基于Spring Boot 建立独立的生产级 Spring 应用程序,并使用 Spring Integration 提供与消息代理的连接可以让我们在使用时几乎无需关心具体的消息队列实现。它屏蔽底层消息中间件的差异,降低切换成本,统一消息的...

艾小仙的专栏 2198

SIwave仿真手册——电源完整性仿真之PDN阻抗的提取(四)

(想不到我这个弱鸡的博主有一天也有被催更的时候,看到后台被催的消息,我慌了,赶紧写一篇把。) 文章目录3.1 PDN阻抗的提取3.1.1手动完成PDN阻抗的提取1、创建pin group2、创建端口3、数据文件的清理和检查(参考1.3.4&1.3.5)4、添加电容模型(参考2.2.1)(==这一步很重要==)5、开始仿真6、查看仿真结果3.1.2利用向导工具完成PDN阻抗的提取1、点击图标![在这里插入图片描述](https://img-blog.csdnimg.cn/36d974339ea5449

luohuo9844的博客 1万+

基于紫光同创FPGA的adf网表文件使用和黑匣子设置

这个时候就可以选择将你的网表文件给到他使用,就是相当于把你的功能模块封装成了一个黑匣子一样,只有外部端口,没有内部代码;,在TOP层的子模块声明里面需要加上/*synthesis syn_black_box */进行黑匣子设置,此时子层 adf 文件作为黑盒是不会综合的,在 device map 时会将顶层综合结果与子层 adf 文件合并传递至布局布线阶段;这些都设置完毕后呢,就可以对工程进行编译和综合了,综合完毕后会生成一个.adf的网表文件,我们要使用的就是这个文件;我这里是把两个子模块的添加了哈;

H2061722的博客 966

Go 语言 YAML 编解码实战指南:深入解析 gopkg.in/yaml.v2 及其在 evilginx2 中的应用

本指南以 evilginx2 仓库中 vendor 目录内的 [gopkg.in/yaml.v2/README.md](https://link.gitcode.com/i/c8cc5678a192035b00573febe84cbeb3) 为核心,系统讲解 Go 生态中最常用的 YAML 库之一 yaml.v2 的安装方式、API 设计、结构体标签语法与底层解析原理,并结合本仓库源码揭示它是如何

gitblog_00413的博客 769

SAP SD 顾问面试问题 consultant interview questionnaire

以下是我个人目前面试团队 SD顾问问题的小结,希望对大家有所帮助, 也可能有回答错误的地方,希望同行不吝赐教。 也希望各位顾问们讲你们遇到的一些面试问题做个跟贴,方便大家共同进步,谢谢。   面试问题清单:  一、销售订单类型影响: 可用性检查,交货类型,输出,信贷,定价,需求,报表,合作伙伴,文本,不完整日志,交货开票,订单开票,公司间开票,统计组,屏幕顺序组,参数文件...

weixin_33825683的博客 1810

Spring Cloud Stream 结合rocketmq

官方网址:https://github.com/alibaba/spring-cloud-alibaba/wiki/RocketMQ你可以在这个地址上下载到相关示例项目,配置项等相关信息spring-cloud-stream 文档(这个地址似乎只有集合kafaka和rabbit的示例): https://docs.spring.io/spring-cloud-stream/docs/3.2.6/reference/html/spring-cloud-stream-rocketmq文档 :https://sp

我的技术博客 3287

李宏毅机器学习hw3

Homework 3 - Convolutional Neural Network 1作业概述 在food_11文件中有三个文件分别是training、validation、testing,打开training和validation可以看见总共有11种食物(0-10的类别编号),而testing是没有类别编号的。 然后用卷积神经网络对食物图片进行分类。 2导入用到的库 torch库 这个我弄了半天,直接pip总是timeout,用镜像源下下来又出现OSError: [WinError..

老问题的博客 4189

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之Port模块配置详解(MCAL配置)

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之Port模块配置详解(MCAL配置)

weixin_42412049的博客 2279

SpringCloud项目github地址汇总

git clone https://github.com/spring-cloud/spring-cloud-gcp.git git clone https://github.com/spring-cloud/spring-cloud-netflix.git git clone https://github.com/spring-cloud/spring-cloud-aws.git git clo...

Chdaring的博客 1万+

16、保障Azure应用安全:密钥管理与身份认证

本文深入探讨了保障Azure应用安全的关键措施,包括使用网络安全工具(如Application Gateway和Azure Front Door)防范攻击,解决传统密钥和机密存储方式的安全隐患,以及通过Azure Key Vault实现敏感信息的安全管理。同时,介绍了使用托管标识实现Azure资源间安全访问的方法,并结合实际操作步骤展示了如何配置Key Vault、设置访问策略、存储机密以及授予Web应用对SQL Server的访问权限。最后,对不同安全措施进行了比较,并提出了在开发、测试及生产环境中的综合

rock5的博客 73

Spring Cloud Stream详解

Spring Cloud Stream是一个用于构建 与 共享消息系统 连接的高度可扩展的 事件驱动微服务。通过Stream可以很轻松的整合RabbitMQ和Kafka,并且可以在两个消息中间件之间来回切换使用。一句话,屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型。.........

怪咖@的博客 1万+

Unity 之jenkins自动打包

1.Jenkins 是什么? jenkins官方网址:https://www.jenkins.io/zh/ Jenkins是一款开源 CI&CD(持续集成&持续部署) 软件,用于自动化各种任务,包括构建、测试和部署软件。 简易安装:Jenkins 是一个基于 Java 的独立程序,可以立即运行,包含 Windows、Mac OS X 和其他类 Unix 操作系统。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。 插件扩展:通过更新中心中的

TxNet 2138

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

spring cloud stream 学习

spring cloud stream 学习 基于《spring cloud stream 3.1.x》 在学习spring cloud stream 之前, 先要了解一下 spring cloud function 模块, 新版采用 function 函数 引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-star

面朝大海,春暖花开 2274

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Spring cloud stream【消息分组】

  上篇文章我们简单的介绍了stream的使用,发现使用还是蛮方便的,但是在上个案例中,如果有多个消息接收者,那么消息生产者发送的消息会被多个消费者都接收到,这种情况在某些实际场景下是有很大问题的,比如在如下场景中,订单系统我们做集群部署,都会从RabbitMQ中获取订单信息,那如果一个订单同时被两个服务获取到,那么就会造成数据错误,我们得避免这种情况。这时我们就可以使用Stream中的消息分组来...

波波烤鸭的博客 9258

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Spring Cloud Stream】异步任务

一、前言       前两篇博客提高了用线程池和消息队列才实现异步任务。本篇博客谈一谈用SpringCloud Stream来实现异步任务。       Spring Cloud Stream是一个用来为微服务应用构建消息驱动能力的框架。它可以基于Spring Boot来创建独立的、可用于生产的Spring应用程序。它通过使用Spring Integration来连接消息代理中间件以实现消息事件驱...

柠檬树 3067

spring cloud stream

概念:spring cloud stream 是一个集成消息中间件的框架,用于构建与共享消息传递系统连接的高度可扩展的时间驱动微服务。支持消息发布,消息订阅,消息分区处理;解决了开发人员无感知的使用消息中间件 三个核心模块: 目标绑定器:复制提供与外部消息中间件的集成 目标绑定:外部消息中间件与应用代码之间的桥梁 消息:生产者和消费者与目标绑定器进行通讯的数据结构 已经实现的目标绑定器如下: RabbitMQ Apache Kafka Kafka Streams Amazon Kines

SevenLitile的博客 1210

spring cloud stream 配置说明

本文对spring cloud stream 的相关配置,进行逐一注释说明,作为工具在需要的时候查看使用。配置中的输入(input)输出(output)通道可以换成自己的,详情如下 spring: cloud: stream: #实例数量,默认1 instance-count: 1 #实例索引,从0到instanceCount-1,用于分区和使用k...

cdzatdown的博客 3427

RocketMQ以及Spring Cloud Stream的介绍

Spring Cloud Stream是一个构建消息驱动微服务的框架,解决了开发人员无感知使用消息中间件的问题。通过进一步封装消息中间件,Spring Cloud Stream实现了代码层面对消息中间件的无感知,甚至可以动态切换中间件(如RabbitMQ切换为RocketMQ或Kafka),使微服务开发更加解耦,服务可以更专注于自身业务流程。

shitou的博客 916

[翻译]Spring Cloud Stream

Spring Cloud Stream是创建消息驱动微服务应用的框架。Spring Cloud Stream是基于spring boot创建,用来建立单独的/工业级spring应用,使用spring integration提供与消息代理之间的连接。本文提供不同代理中的中间件配置,介绍了持久化发布订阅机制,以及消费组以及分割的概念。将注解@EnableBinding加到应用上就可以实现与消息代理的连接,@StreamListener注解加到方法上,使之可以接收处理流的事件。}}...}}...

m0_67401920的博客 1033

Spring Cloud Stream 多通道创建

一个SpringCloudStream应用可以有任意数目的input和output通道,后者通过@Input和@Output注解在接口中定义。 定义输出通道package cn.test.custom;import org.springframework.cloud.stream.annotation.Output; import org.springframework.messaging.Mess

helloworld的专栏 1万+

Spring Cloud Stream应用模型及配置详解

Spring Cloud Stream 是一个中间件中立的框架,通过输入和输出通道与消息中间件(如 Kafka 和 RabbitMQ)进行通信。其核心模块包括 Binder(负责与消息中间件交互)、Application(封装的消息机制)、@Input 和 @Output(标识输入输出通道)等。从消息层面,应用模型可细分为 Source(发布消息)、Channel(消息通道)、Binder(与消息平台交互)和 Sink(接收消息)。以 Kafka 为例,讲解配置详情。

giser@2011的博客 1466

Spring Cloud Stream总结

概念 1、group: 组内只有1个实例消费。如果不设置group,则stream会自动为每个实例创建匿名且独立的group——于是每个实例都会消费 组内单次只有1个实例消费,并且会轮询负载均衡。通常,在将应用程序绑定到给定目标时,最好始终指定consumer group 2、destination binder: 与外部消息系统通信的组件,为构造 Binding提供了 2 个方法,分别是 ...

beishuibo1517的博客 447
上一篇: Spring Cloud Bus
下一篇: 工厂模式
炒栗子不加糖
博客等级 码龄10年 68粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值