问题标签 [event-driven-design]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
397 浏览

microservices - 了解事件驱动的微服务

因此,我一直在围绕微服务架构的事件驱动设计进行一些研究,以帮助解耦我一直在帮助开发的一些微服务。目前我遇到的问题是每个微服务都直接调用其他微服务来获取似乎紧密耦合的数据,并在以下文章中进行了概述:

https://thenewstack.io/synchronous-rest-turns-microservices-back-monoliths/

所以事件驱动架构似乎有助于整体设计,但我感到困惑的是,如果调用的 API 需要来自另一个服务的数据,GET 请求将如何处理数据?它会将请求发布到公共汽车并订阅答案吗?您是否只需要等待响应可能会延迟对消费者的响应?

或者这是您需要直接调用另一个 API 的情况?任何资源将不胜感激。

0 投票
1 回答
147 浏览

c# - 多项目解决方案中的事件驱动设计

我尝试用 Xamarin.ios 做一个 iOS 应用程序。我有一个服务器,我可以使用 websockets 将事件发送到我的应用程序。但是处理这个事件的函数是在另一个项目中实现的。

因此,如果服务器发送一个新事件,我想告诉 iOS 项目有一个新事件到达。我不能退回它,因为我不能互相引用这两个项目。

如何在一个解决方案中为多个项目实施事件驱动设计?

这是我当前的代码:

iOS 项目

一般项目(我的活动到达的地方)

0 投票
4 回答
2336 浏览

spring-boot - 微服务:事件驱动架构的服务发现/断路器

我对微服务还很陌生...

我有兴趣了解更多关于服务发现断路器等两种主要模式的信息,并且我对如何实现这些模式进行了研究。

作为一名 Java 开发人员,我使用的是 Spring Boot。据我了解,如果微服务通过 HTTP 进行通信,这些模式很有用。

我最近看到的主题之一是事件驱动架构的重要性,它利用事件消息总线,服务将使用该事件消息总线向其他服务发送消息,这些服务订阅总线并处理消息。

鉴于这种事件驱动的性质,鉴于这些通常适用于通过 HTTP 进行通信的服务,如何实现/实施服务发现和断路器?

0 投票
2 回答
2912 浏览

events - 关于事件驱动拓扑中的中介者

我正在阅读这篇名为“事件驱动架构中的变体”的文章,其中展示了中介和代理拓扑。

根据文章,中介拓扑看起来有点像这样:

中介拓扑

事件流从客户端向事件队列发送事件开始,事件队列用于将事件传输到中介。事件调解器接收初始事件并通过向事件通道发送额外的异步事件来编排该事件以执行流程的每个步骤。事件处理器,它监听事件通道,从偶数中介接收事件并执行特定的业务逻辑来处理事件 [...] 重要的是要注意,事件中介实际上并不执行必要的业务逻辑处理初始事件,相反,它知道处理事件所需的步骤 [...] 事件通道可以是消息队列或消息主题。

因此,我正在研究这个图表,试图了解中介如何确定给定处理器何时完成对给定事件的处理,以便它可以协调流程的下一步。

文章说的不够清楚

对于每个初始事件步骤,事件调解器创建一个处理事件,发送该处理事件并等待相应事件处理器处理该处理事件。这个过程一直持续到初始事件中的所有步骤都已处理完毕。

现在,文章清楚地表明通信是异步的,并且事件消息将通过消息队列传播,但是该图没有显示任何从事件处理器出来并返回到调解器的事件

文章说调解器等待事件处理器完成,但不清楚这在架构方面应该如何发生。

它是异步的、基于队列的 RPC(例如Rabbit RPC),还是有另一个侦听器在某处等待异步响应?

关于如何从架构的角度实现这一点的任何想法?

0 投票
1 回答
48 浏览

javascript - 如何以递归方式使用 JS 回调?

我有这部分代码不起作用。它应该成为树视图的一部分。klassification_ajax 的回调应该在函数完成后工作,但是由于在 while 循环的不同迭代中其他 ajax 调用,所以它根本不起作用。我检查了如果我只有一次迭代,它可以工作,因为它不会干扰其他 ajax 调用,但是当它进行第二次迭代时,它们同时发生,结果它们都不起作用。然后我意识到我应该将这些迭代作为嵌套回调使其逐步工作,但是如何?????

0 投票
1 回答
670 浏览

java - 流式数据架构

我想为我的以下项目设计最佳架构:我有一个在任何设备(台式机、移动设备......)上运行的应用程序,用户可以在其中发布或接收与其他用户共享数据的通知。

基本上,用户可以与其他用户共享他在应用程序上所做的事情,实时通知其他用户更改,反之亦然。并且用户只能接收其他用户允许的通知。

例如,当用户在屏幕上移动小部件时,应用程序必须存储新的小部件位置,并实时通知其他用户这个新位置以在他们的屏幕上执行更改。对于这种需求,我会看到一个具有发布-订阅模式的事件驱动架构。但是,我想当应用程序需要检索用户列表以共享小部件时,我还需要处理同步请求-响应模式。

我快速浏览了 Manning 的 Streaming Data book,其中描述了流数据架构,但我不知道这种架构是否适合我的需求。例如在实现部分的一个区别是事件源生产者也可以是我的应用程序中的事件消费者(在书中,事件源生产者是一个单独的公共流 API,真正的应用程序是唯一的消费者)

如果我遵循这本书的想法,我的想法如下:用于数据摄取和数据访问的 WebSocket,作为消息存储库的类似代理的 Kafka,以及使用 Kafka 主题并将数据持久保存在数据库中的单独分析服务。一个疑问是我是否只能使用一个 WebSocket 来进行数据摄取和数据访问。

您将使用哪些详细的架构和工具来满足这些需求?

对于实现,我会考虑将 javascript 用于客户端部分,将 Java 用于服务器部分。

0 投票
2 回答
1760 浏览

java - 如何在事件驱动微服务中创建重放机制

我们有 7 个微服务通过事件总线进行通信。我们有一个实时交易序列:

服务 1->service2->service3(依此类推。)直到交易被视为完成

我们必须确保所有交易都发生。

当然,我们可以在任何时候失败。因此,我们正在考虑将“半生不熟”的交易重播到完成的机制。

它变得棘手。我们想到了两种方法:

  1. 拥有另一个服务(主管服务),它将以我们的实时序列记录每个部分,并且在事务未完成(超时)时足够聪明,以了解我们如何从左点继续

    缺点:一个中央服务上有很多“智能”逻辑

  2. 在每项服务上都有重试机制,同时每个服务都照顾自己并重播自己的服务,直到成功或用尽

    缺点:在每个服务上重试重复的代码很多

各位专家怎么看?

感谢

0 投票
2 回答
415 浏览

c# - 在事件驱动编程中一个接一个地调用函数

我正在开发一个软件,其中软件为硬件面板发出命令,一旦发出命令,几秒钟后就会收到它的响应。不同的硬件命令有不同的功能,例如

以及用于运行其他命令的相同模式的其他函数。

一旦我们收到命令 A 的响应,我就会从响应中调用另一个函数,但是根据设计模式实践,这种方法并不好。

我要做的就是制作一个函数列表并一个接一个地调用所有这些函数,但是一旦我得到第一个函数的响应,就会调用下一个函数。

我通过使用多播委托进行了尝试,但是一旦我将所有函数添加到该委托,我无法找出如何调用获取函数列表。这就是我从那以后尝试做的事情。

0 投票
1 回答
1405 浏览

domain-driven-design - 如何在事件驱动架构中控制消息的幂等性?

我正在开发一个 DynamoDB用作数据库的项目,应用程序的每个用例都由message在数据库中创建/更新项目后的发布触发。目前代码遵循这种方法:

Udi Dahan 有一个视频Reliable Messaging Without Distributed Transactions,他在视频中谈到了系统在保存到 DB 后但在发布消息之前可能会立即失败的情况的解决方案,因为消息不是事务的一部分。但是在他的解决方案中,我认为他假设使用SQL数据库作为过程涉及保存,作为事务的一部分,正在处理的消息的correlationId,实体修改和要发布的消息。使用NoSQL数据库我想不出一种干净的方式来存储有关消息的信息。

一种解决方案是使用DynamoDB streams并订阅使用一个Lambda或另一个服务发布的事件,以将它们转换为特定于域的事件。我的问题是我无法从域逻辑发送消息,逻辑将分布在处理消息的服务和Lambda/service对更改的反应中,并且解决方案将是特定于平台的。

有没有其他方法来处理这个?

0 投票
0 回答
62 浏览

java - 从 Java 中的两个唯一键中的任何一个中存储和调用一个对象的最有效方法是什么?

我正在努力创建一个非常注重性能的事件驱动系统。在这个程序中,我有一个对象需要链接到两个不同的唯一键。该对象包含触发两个不同事件之一时要做什么的参数。

我目前需要在使用唯一键触发的两个不同回调中快速调用其中一个对象

在上面的示例中 key1 != key2,但是 mon1 和 mon2 是相同的。

目前我正在使用代码

有一个更好的方法吗?MonthConfiguration 对象的数量相当大,我担心这样做的效率和可能的内存泄漏,因为对象被删除/添加到地图中。