《Spring Cloud Alibaba 从入门到实战》分布式消息(事件)驱动

分布式消息(事件)驱动

1、简介

事件驱动架构(Event-driven 架构,简称 EDA)是软件设计领域内的一套程序设计模型。

这套模型的意义是所有的操作通过事件的发送/接收来完成

传统软件设计

举个例子,比如一个订单的创建在传统软件设计中服务端通过接口暴露创建订单的动作,然后客户端访问创建订单。

事件驱动设计

在事件驱动设计里,订单的创建通过接收订单事件来完成,这个过程中有事件发送者和事件接受者这两个模块,事件发送者的作用是发送订单事件,事件接受者的作用的接收订单事件。

2、Spring 消息编程模型

不同的消息中间件发送消息的代码:

image

可以看出,每个消息中间件都有自己的消息模型编程。

统一模型

Spring 生态里有两个消息相关的模块和项目,分别是 spring-messaging 模块和 Spring Integration 项目,它们对消息的编程模型进行了统一,不论是 Apache RocketMQ 的 Message,或者是 Apache Kafka 的 ProducerRecord,都被统一称为 org.springframework.messaging.Message 接口。

Message 接口有两个方法,分别是 getPayload 以及 getHeaders 用于获取消息体以及消息头。这也意味着一个消息 Message 由 Header 和 Payload 组成

Payload 是一个泛型,意味是消息体可以放任意数据类型。Header 是一个 MessageHeaders 类型的消息头。

有了消息之后,这个消息被发送到哪里呢?

Spring 提供了消息通道 MessageChannel 的概念。消息可以被发送到消息通道里,然后再通过消息处理器 MessageHandler 去处理消息通道里的消息。

如果消息通道里只有 1 个消息,但是消息处理器有 N 个,这个时候要被哪个消息处理器处理呢?

这里又涉及一个消息分发器的问题。

  • UnicastingDispatcher 表示单播的处理方式,消息会通过负载均衡被分发到某一个消息处理器上(默认)
  • BroadcastingDispatcher 表示广播的方式,消息会被所有的消息处理器处理。

3、Spring Cloud Stream

Spring Cloud Stream 是一套基于消息的事件驱动开发框架,它提供了一套全新的消息编程模型,此模型屏蔽了底层具体消息中间件的使用方式。开发者们使用这套模型可以完成基于消息的事件驱动应用开发。

Spring Cloud Stream 在上面说到的 spring-messaging 和 Spring Integration 项目的基础上再进行了一些封装,提出一些新的概念,让开发者能够更简单地使用这套消息编程模型。

image

最佳实践

参考笔者另一篇文章:https://cmty256.github.io/pages/d67430/#%E4%BB%80%E4%B9%88%E6%98%AF-spring-cloud-stream

参考书籍

重磅下载 | Java 开发者必备手册《Spring Cloud Alibaba 从入门到实战》,阿里双11同款!-阿里云开发者社区 (aliyun.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/215691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「差生文具多系列」推荐两个好看的 Redis 客户端

📢 声明: 🍄 大家好,我是风筝 🌍 作者主页:【古时的风筝CSDN主页】。 ⚠️ 本文目的为个人学习记录及知识分享。如果有什么不正确、不严谨的地方请及时指正,不胜感激。 直达博主:「…

ModuleNotFoundError: No module named ‘huggingface_hub.snapshot_download‘

ModuleNotFoundError: No module named ‘huggingface_hub.snapshot_download’ 的解决方法 根据提示显示XXX模块不存在,一般会直接安装XXX模块,但是这个不需要显式安装huggingface-hub。 只需要升级sentence-transformers即可。 pip install -U sente…

Innosetup 安装包 在安装前判断是否有其他安装程序正在安装...

方法有: 1.使用系统服务WinMgmts 系统信息通过 "winmgmts:\\.\root\CIMV2" 遍历进程列表。 var FSWbemLocator: Variant; FWMIService : Variant; FWbemObjectSet: Variant; begin Result : false; FSWbemLocator : CreateOleObject(WBEMScripti…

Fabric使用自己的链码进行测试-go语言

书接前文 Fabric链码部署-go语言 通过上面这篇文章,你可以部署好自己的链码 (后面很多命令是否需要修改,都是根据上面这篇文章来的,如果零基础的话建议先看上面这篇) 就进行下一步 在测试网络上运行自己的链码 目…

PDF文件的限制编辑,如何设置?

想要给PDF文件设置一个密码防止他人对文件进行编辑,那么我们可以对PDF文件设置限制编辑,设置方法很简单,我们在PDF编辑器中点击文件 – 属性 – 安全,在权限下拉框中选中【密码保护】 然后在密码保护界面中,我们勾选【…

系列十、SpringBoot + MyBatis + Redis实现分布式缓存(基于注解方式)

一、概述 上篇文章 系列九、SpringBoot MyBatis Redis实现分布式缓存 介绍了基于xml方式实现分布式缓存的效果,当前大家使用的技术栈基本是springboot各种框架的组合,而springboot显著的一个特点就是去xml配置,那么在无xml配置的情形下&…

CStdioFile

CStdioFile 文件创建、数据写入、写入路径 void StdReferenceDWG::RefDrawCrvt(StdOneReference& ref) {char* old_locale _strdup(setlocale(LC_CTYPE, NULL));setlocale(LC_CTYPE, "chs");//设定CString strPath StdTool::GetCurPath() _T("衬图\\Re…

界面控件DevExpress中文教程 - 如何用Office File API组件填充PDF表单

DevExpress Office File API是一个专为C#, VB.NET 和 ASP.NET等开发人员提供的非可视化.NET库。有了这个库,不用安装Microsoft Office,就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CS…

基于SpringBoot的就业信息管理系统设计与实现(源码+数据库+文档)

摘 要 在新冠肺炎疫情的影响下,大学生的就业问题已经变成了一个引起人们普遍重视的社会焦点问题。在这次疫情的冲击之下,大学生的就业市场的供求双方都受到了不同程度的影响,大学生的就业情况并不十分乐观。目前,各种招聘平台上…

Netty高性能的原因

Netty 之所以具有高性能,主要得益于以下几个方面的设计和实现: 异步非阻塞: Netty采用基于事件驱动的异步非阻塞模型,即 Reactor 模式。这意味着它能够处理大量并发连接而不会因为I/O操作而阻塞线程。不会因为每个连接都需要一个单…

云原生之使用Docker部署Mariadb数据库

目录 一、什么是云原生 二、Docker介绍 三、Mariadb数据库介绍 四、如何使用Docker部署Mariadb数据库 一、什么是云原生 云原生是一种综合性的技术和方法论,旨在对应用程序进行全生命周期的管理,包括开发、部署、运行和扩展。它倡导将应用程序设计为…

moviepy基本参数用法大全

阅读本文档的前置说明: 本文档用于讲解Python的moviepy库的自带函数的用法,主要目的是讲一下每个函数的每个参数的含义,无需一开始就全部掌握,粗略看一下就行,可以在后面自己开发过程,遇到不会用的函数再回…

大模型应用_AutoGPT

1 功能 整体功能,想解决什么问题 单独使用 ChatGPT 时,只提供基本的聊天,无法实现具体的功能,如果想提供某种功能,则需要结合程序实现。AutoGPT目标是建立和使用 AI Agent,设定一个或多个目标,…

数据库——字段拆分与合并

一、GP或PostgreSQL 1.字段拆分成行 unnest(string_to_array(test, ,)) 例如某一字段值为"a,b,c,d",使用string_to_array将其拆分为数组,然后使用unnest将数组平铺成一张表 SELECT unnest(string_to_array(555,666,777, ,)) 2.字段拆分成列…

【EI征稿倒计时3天】第四届IEEE信息科学与教育国际学术会议(ICISE-IE 2023)

第四届IEEE信息科学与教育国际学术会议(ICISE-IE 2023) 2023 4th International Conference on Information Science and Education(ICISE-IE 2023) ICISE-IE2024已上线岭南师范学院官网(点击查看) 第四届IEEE信息科学与教育国…

双荧光素酶报告基因检测(五)

关于双荧光素酶报告基因检测中遇到的问题及解决措施 问题1:为什么要用荧光素酶实验来做检测,不用其他报告基因来做,GFP可以吗? 采用荧光素酶来做实验是由其自身的优势所决定的:(1)蛋白不需要翻…

@Transactional失效问题

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 关于Transactional 日…

解读 | 为什么有很多名人让人们警惕人工智能

大家好,我是极智视界,欢迎关注我的公众号,获取我的更多前沿科技分享 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq 这个话题总能引起很…

六、ZGC深度剖析

一、引言 对于Java 程序员来说,JVM 帮助我们做了很多事情。 JVM是虚拟机,能够识别字节码,就是class文件或者你打包的jar文件,运行在操作系统上。 JVM帮我们实现了跨平台,你只需要编译一次,就可以在不同的…

在线课堂知识付费小程序源码系统 开发组合PHP+MySQL:用手机随时随地地学习,讲师亲自在线授业解惑 带安装部署教程

近年来,人们对于学习的需求也日益增加。传统的课堂教学已经无法满足人们的学习需求,而在线课堂则能够让人们随时随地地进行学习。同时,随着知识付费的兴起,越来越多的讲师也愿意将自己的知识和经验分享给更多的人。因此&#xff0…