apache-kafka - 如何将事件驱动架构应用于此示例?

标签 apache-kafka architecture rabbitmq microservices event-driven

我不确定如何在现实场景中使用事件驱动架构。假设有一个由以下后端服务组成的路线规划平台:

  • 用户服务(管理用户数据和角色)
  • map 数据服务(道路和地址,仅由管理员修改)
  • 规划任务服务 (接受新的路线规划任务,跟踪后台任务,存储结果)

公共(public)网站通常会请求所有这 3 项服务的数据。 map 数据服务需要有关数据更改请求的用户角色的信息。 planning-tasks-service 需要有关用户的信息以及有关 map 数据的信息以验证新任务。

现在这些服务只会向彼此发出同步请求以获取所需的数据。将这种基本结构转化为事件驱动架构的最佳方式是什么?是否可以通过使用事件来减少依赖?公共(public)网站将如何获得所需的数据?

最佳答案

Cosmin 是 100% 正确的,因为您需要一些东西来进行编排。

如果您的客户需要来自多个服务的数据,可以采用的一种方法是体验 API 方法。

客户端调用体验 API,该 API 执行编排 - 从不同来源提取数据并将其提供回客户端。体验 API 的设计非常有意地偏向于客户的需求。

根据您目前所说的细节,我看不出有什么需要基于事件的架构。客户端和 ExpAPI 之间的通信可以是同步和异步的混合,ExpAPI 到 [服务] 的通信也是如此。

就其值(value)而言,将所有这些放在 API 网关上并不是一个坏主意,因为它们旨在托管 API,因此为管理它们提供了理想的控制和可观察性。

根据 OP 评论更新

I was really interested in how an event-driven architecture could reduce dependencies between my microservices, as it is often stated

让组件(或系统)通过事件进行对话在某种程度上是控制反转的异步等价物,因为事件消费者与发出事件的事物并不紧​​密耦合。这就是减少依赖性的方式。

你可以做的一件事是做一个小的副项目,就像学习练习一样——拍下你的代码的快照,然后粗略地转换为基于事件的,然后看看它是如何进行的——而不是与其说是尝试事件化您的解决方案,不如说是看看将事件放入现实世界的解决方案中是什么样子。如果您有时间,当然可以。

关于apache-kafka - 如何将事件驱动架构应用于此示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68663370/

相关文章:

error-handling - Clojure - 引用一个 defrecord 函数

ruby-on-rails - 处理 Rails 中的纬度/经度和 mysql 空间点

Windows 上的 RABBITMQ_BASE

windows - RabbitMQ Erlang 分发失败

java - 如何避免连续出现 "Resetting offset"和 "Seeking to LATEST offset"?

java - 处理 Kafka 流中的异常

docker - 手动安装Kafka连接器

c# - 关于将 POCO 从一层转换为另一层 POCO 的设计问题

rabbitmq - 队列在 RabbitMQ 集群中应该如何分布?

apache-kafka - Spark Streaming 与 Nifi