第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

淺談事件驅(qū)動(dòng)架構(gòu)(EDA)的概念及關(guān)鍵組件

近年来,事件驱动架构已经变得非常流行,在开发高度可扩展的分布式系统方面。它是一种设计软件的方式,其中不同部分通过发送和响应事件来通信。

一个事件就是发生的事情,比如,

  • 用户注册
  • 用户上传照片
  • 支付完成,

系统中不同的部分不会直接向彼此发出请求,而是关注这些事件,并在需要时进行回应(异步)。

比如说:

  1. _支付服务模块_完成并触发“支付完成”的事件。
  2. _库存服务_响应该事件并更新新购商品的库存。
  3. _邮件服务_响应并发送确认邮件。

我们来看看事件驱动架构中的组件的一个非常简单的图。

关键要素

图片说明

1. 事件生产者/发布者
当某些事情发生时创建并发布事件的系统或服务。
示例:当一个新用户注册时,用户服务会发送一个“用户注册”的事件。

2. 消息代理
消息代理是一种中间件,它位于事件生产者和事件消费者之间。其主要作用是高效地接收、存储和转发事件,确保事件准确无误地送达合适的消费者服务。

在这一背景下,消息代理里有一个关键的概念叫做信道。这些信道充当通信路径,协调从生产者到相应消费者的事件流动。

  • Kafka 中,这些通道被称作 主题。它支持 多订阅者模型,允许多个消费者从同一个发布者接收消息。
  • RabbitMQ 中,这些通道被称作 队列。RabbitMQ 的队列通常是 点对点 的,这意味着一个队列中的消息只能由一个消费者接收和处理。

示例技术:Kafka、RabbitMQ、AWS SNS/SQS(亚马逊SNS/SQS)、Google Pub/Sub(谷歌Pub/Sub)。

3. 事件消费者/订阅者
监听事件并作出反应的服务。
例如:通知服务监听“用户注册”的事件并发送一封欢迎邮件。

4. 事件
描述实际发生的事件的消息。它通常包含结构化数据,比如 JSON 或 XML。
例如:示例事件消息:

    {
      "数据": {
        "id": "event-123456",
        "类型:": "注册事件",
        "时间戳": "2025-04-01T12:00",
        "属性": {
          "id": "usr-98765",
          "电子邮件": "user@example.com",
          "姓氏": "example",
        }
      }
    }

切换到全屏,退出全屏

经纪交易平台

交换是一种机制,决定消息如何进入队列。不同类型的交换提供了不同的消息分发方式。

直接交换(一对一路由)
基于路由键和队列绑定键(RabbitMQ)的精确匹配将消息路由到队列。
它是怎样工作的?

  • 生产者发送一条带有路由键的消息。
  • 交换机只会把消息转发给那些绑定关键字匹配的队列。

示例:
带有路由键为 "order.created" 的消息只会发送到绑定的队列。

如图所示
这张图片

Fanout 交换器(广播)
将消息广播到所有绑定的队列,忽略路由键,就像在RabbitMQ-Fanout交换器中一样
(RabbitMQ-Fanout 交换器 | Kafka-每个主题可以有多个消费者)。

它是怎么工作的?

  • 生产者发送了一条消息。
  • 交换器将消息转发到所有绑定的队列。

例如:
通知事件会被广播到多个服务(电子邮件、短信、以及推送通知)。

图片描述

主题交换(模式匹配)
根据路由键中的通配符模式来分发消息。支持用*匹配一个词,用#匹配多个词。(例如RabbitMQ的主题交换和Kafka的带分区键的主题)。
它是怎么工作的?

  • 使用 . 用法来分隔 routing key 中的单词,例如 "order.payment.failed"

示例:
绑定到的队列会接收 "order.*",并且会接收 "order.created""order.cancelled",但是不会接收 "user.created"

图片描述
看起来是一张图片,点击可以查看。

EDA的优势 - Reactive Manifesto(反应宣言)
  • 可扩展性:解耦的服务可以各自扩展。
  • 灵活性:无需改动现有服务,就可以轻松添加新的事件消费者。
  • 实时处理:支持实时数据流处理,并能够快速响应。
  • 弹性:只要妥善管理事件和订阅,一个服务的故障就不会影响整个系统。
  • 松耦合:组件通过事件进行交互,从而减少了依赖性。
EDA的缺点
  • 最终的一致性:系统不同部分可能会暂时持有过时的信息,直到所有事件都被处理。
  • 调试难度大:在多个异步事件之间追踪问题变得更加困难。
  • 延迟增加:由于异步的特性,某些事件可能需要更长的时间来处理。
  • 重复事件:需要幂等性来避免重复处理。
  • 某些代理(如RabbitMQ)不能保证消息的顺序:一些代理不能保证消息的顺序。
  • 需要学习事件驱动的设计模式:需要掌握事件驱动的设计模式。
最后,让我们来看看结语.

如果你打算实现一个分布式、实时且高度可扩展的系统,你一定要考虑实现一个事件驱动的架构,来充分利用它带来的所有好处。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報(bào)

0/150
提交
取消