问题标签 [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 投票
0 回答
46 浏览

php - Zf2 事件练习(可变?)

我有一个关于 zf2 中事件实践的问题。作为最佳实践,我们必须默认使用可变接口来动态注入对象。

但是,事件呢?事件应该是可注入的吗?例如,AuthenticationEvent 中的身份验证服务。直接调用 AuthenticationEvent 还是通过 get/set 调用更好?

例子:

或者

问候

0 投票
2 回答
1258 浏览

message-queue - 具有广播和路由功能的轻量级消息总线?

我正在尝试找到可以处理以下内容的最轻量级的消息总线(队列?):

  1. 生产者 A 订阅总线。总线是通过众所周知的标识形式(如名称、套接字或其他东西)指定的。
  2. 消费者 B 订阅相同的总线并仅注册某种类型的消息。
  3. 消费者 C 订阅了同一条总线,并注册了另一种与 B 重叠的消息。
  4. 生产者 A 将一条消息放入总线,使 B 和 C 都感兴趣。B 和 C 都接收到消息(不仅仅是其中一个,而是两个)。

A、B、C 和总线位于不同的机器中。

0 投票
1 回答
97 浏览

filesystems - 基于文件系统的工作流程

我有一个带有网络应用程序的应用程序,它基本上接受一些日志文件的上传,并且有一些进程应该按顺序对接收到的日志文件进行操作。在其当前实现中,每个进程从文件系统接收文件并执行一些处理并将处理后的文件输出到其他文件夹,并从输入文件夹中删除相同的文件。现在,我想知道这是否是最好的方法,但我对此表示怀疑。在这里遵循的最佳方法应该是什么?我应该为此使用像 RabbitMQ 这样的消息传递系统吗?我应该传递队列中的整个文件还是只传递一个目录/文件名并将文件保存在其他一些常见的(例如,NAS)或分布式文件系统上?

0 投票
0 回答
41 浏览

java - 大量数据的事件驱动(Java)

事件驱动是一个不错的概念。但是业务并不关心编程方法,而是期望应用程序快速健壮容错等。

如果我有以下过程:

我可以将 T1 和 T2 绑定在一起,如下所示:

事件驱动的方法中,我需要一个媒介,一个消息:

因此,最终,会为每条数据创建另一个包装器。这会产生大量的垃圾,以便以后收集。

问题:如何在不创建任何包装器的情况下处理大量数据?

0 投票
1 回答
1824 浏览

spring - 具有多个实例的微服务事件驱动设计

目前,我们设计并计划将我们的系统转换为微服务架构模式。

为了松散耦合,我们考虑使用 JMS 主题进行事件驱动设计。这看起来很棒。但我现在不知道如何解决多个微服务实例的问题。对于故障转移和负载平衡,我们有每个服务的n 个实例。如果将事件发布到主题,每个实例都将接收并处理该事件。

可以使用数据存储中的锁和已处理状态来处理此问题。但是这个解决方案看起来非常昂贵,并且每个实例都有相同的工作。这对我来说不是负载平衡。

这种模式是否有一些好的解决方案或最佳实践?

0 投票
1 回答
294 浏览

javascript - 用于将块写入文件的事件驱动模式 - JS

我正在尝试通过 WebRTC 传输文件,并且我正在努力找出写入数据的良好模式。由于文件块将以未知的速度进入,我需要能够编写每个块可用时;这意味着两件事:

  1. 如果数据进来太快,那么我们需要在当前写入任务完成后将每个块排队等待稍后写入
  2. 如果数据进来太慢,那么我们需要等待一个块变得可用

理想情况下,我想避免不得不依赖setTimeout()等待大块到达。到目前为止我所拥有的很接近,但并不完全是我想要的:

这样做的问题是,如果块进入得太快,fileWriter将无法准备好写入下一个块并且会抛出异常。但是,如果块进入太慢,设置正确的超时将非常棘手。

似乎事件驱动的方法在这里效果最好。一个事件是来自 的数据消息RTCDataChannel。另一个事件是fileWriter已经完成写入,并准备写入下一个块。但我遇到的问题是如何正确地等待一大块进来......

如果浏览器不忙于写入文件,而只是等待块进入,则浏览器应该在块可用时立即开始写入块。setTimeout但是如果没有丑陋的循环,我无法弄清楚如何做到这一点;我不知道如何发布一个表明我们不再需要等待并且可以继续写作的事件。

这样做的好模式是什么?

0 投票
3 回答
1140 浏览

.net - 具有事件溯源的领域模型

愚蠢的问题......但是如果我使用事件溯源,为什么我需要一个域模型。

我有(当然是事件总线)和

  • 具有业务操作的应用程序服务,每个都在基本验证后发送命令
  • 接收命令的命令处理程序执行额外的命令验证并发布事件
  • 处理事件、更新读取模型并将事件存储在存储库(事件源)中的事件处理程序
  • 提供读取模型的读取模型服务
  • 使用读取模型服务中的读取模型的前端(UI 或其他)......并利用应用程序服务进行业务操作。

为什么我需要聚合根和域实体?附加层的作用是什么?

0 投票
1 回答
126 浏览

javascript - 以事件驱动的方式编写异步代码

我正在编程,node.js有时异步函数变得非常肮脏。我想编写异步代码,但在事件发生时检索数据我知道承诺,但这并不是我想要的,只是我问的是这样的

然后我想以事件方式获取数据

有什么办法可以做到这一点我知道承诺和一些反对回调地狱的第 3 方库,但我的问题尤其是我写了如何设计我的代码的方式?

0 投票
1 回答
726 浏览

events - 时间驱动的事件架构

我正在研究时间驱动的事件,我似乎无法弄清楚如何在不经常使用过多 CPU 的情况下做到这一点。

这似乎是我能想到的最基本的事件处理程序,但我认为它会不断消耗大量 CPU 而没有真正做任何事情。

所以问题基本上是:其他任何语言的时间驱动事件如何处理时间驱动事件?他们是否经常检查一个人是否准备好被解雇?他们是否使用巧妙的调度机制?

提前致谢。

0 投票
0 回答
64 浏览

spring-4 - 有谁知道如何在春季测试 EventListeners?

我正在研究 spring 4.2 中的 spring 域事件功能,它看起来真的很棒。但是,测试起来有点混乱。

鉴于以下业务逻辑:

发布者被插入到构造函数中,所以我可以很容易地模拟它,

在我的 junit 类中,我想断言 applicationEvent 是从我的服务发布的。理想情况下,这应该在没有模拟的情况下完成。有谁知道是否存在一个“测试发布者”来保留所有正在发布的事件,所以我可以在测试期间将其注入我的服务并在发布者的这个测试实例上断言?我可以自己写,但这听起来像是一个普遍的问题,所以它应该在 MHO 中存在一个默认的测试实例