标签: event-driven-design

为什么分别表示命令和事件?

强调事件的体系结构中的命令和事件之间有什么区别?我能看到的唯一区别是命令通常由系统外的actor来源/调用,而事件似乎是由处理程序和系统中的其他代码提供的.但是,在我看到的许多示例应用程序中,它们具有不同(但功能相似)的接口.

events command event-driven-design cqrs

65
推荐指数
5
解决办法
1万
查看次数

在Spring中使用什么样的"EventBus"?内置,Reactor,Akka?

我们将在几周内开始新的Spring 4应用程序.我们想使用一些事件驱动的架构.今年我在这里和那里读到关于"Reactor"的信息,在网上搜索时,我偶然发现了"Akka".

所以现在我们有3个选择:

我无法找到真正的比较.


现在我们只需要:

  • X 注册听 Event E
  • Y 注册听 Event E
  • Z 发送一个 Event E

然后X,Y将接收并处理该事件.

我们很可能会以异步方式使用它,但肯定会有一些同步方案.我们很可能总是将一个类作为事件发送.(Reactor样本主要使用字符串和字符串模式,但它也支持对象).


据我所知,ApplicationEvent默认情况下同步Reactor工作并以异步方式工作.并且Reactor还允许使用该await()方法使其有点同步.Akka提供或多或少相同Reactor,但也支持Remoting.

关于Reactor的await()方法:它可以等待多个线程完成吗?或者甚至可能是这些线程的一部分?如果我们从上面举例:

  • X 注册听 Event E
  • Y 注册听 Event E
  • Z 发送一个 Event E

可以通过说:等待X Y完成来使其同步.它是否有可能让它等待X,但不是为了Y


也许还有一些替代品?例如JMS呢?

很多问题,但希望你能提供一些答案!

谢谢!


编辑:示例用例 …

spring multithreading event-driven-design akka project-reactor

40
推荐指数
2
解决办法
2万
查看次数

事件驱动架构的jQuery插件?

有没有Event Driven Architecture jQuery插件?

第1步:订阅

替代文字
订阅者在中间订阅事件处理程序,并传递回调方法,以及他们正在侦听的事件的名称......

即两个绿色用户将监听p0事件.蓝色用户将收听p1事件.


第2步:p0事件由另一个组件触发到事件处理程序

替代文字

  1. 向事件处理程序触发p0事件
  2. 事件处理程序通知它的订阅者事件,调用他们在步骤1:订阅中订阅时指定的回调方法.

请注意,蓝色订阅者不会收到通知,因为它没有侦听p0事件.


第3步:向事件处理程序触发p1事件组件

替代文字

p1事件由另一个组件触发

与以前一样,除了现在蓝色订阅者通过其回调接收事件,而其他两个绿色订阅者不接收该事件.

图片来自leeand00,在Flickr上

我似乎无法找到一个,但我猜他们只是在Javascript/jquery中称之为其他东西

这个模式还有一个名字吗?因为它不仅仅是一个基本的发布者/订阅者,它必须被称为我想的其他东西.

javascript event-driven-design jquery-plugins publish-subscribe event-bus

30
推荐指数
2
解决办法
1万
查看次数

PHP中的事件驱动架构和钩子

我正计划开发一个具有PHP后端的游戏来与数据存储库进行通信.我在考虑这个问题,并得出结论,我们的游戏最好的设计范例将是事件驱动的.我希望有一个成就系统(类似于本网站的徽章系统),基本上我希望能够将这些"成就检查"挂钩到游戏中发生的许多不同事件中.即:

当用户执行操作时,将触发钩子Y并调用所有附加函数以检查成就要求.

在构建这样的架构时,我将允许轻松添加新的成就,因为我将要做的就是将检查功能添加到正确的钩子中,其他一切都将落实到位.

我不确定这是否是对我打算做什么的一个很好的解释,但无论如何我正在寻找以下内容:

  1. 有关如何编写事件驱动应用程序代码的良好参考资料
  2. 代码片段展示了如何在PHP中的函数中放置"钩子"
  3. 显示如何将函数附加到第2点中提到的"钩子"的代码片段

关于如何完成2)和3),我有一些想法,但我希望精通这个问题的人可以对最佳实践有所了解.

先感谢您!

php hook event-driven-design

12
推荐指数
2
解决办法
2万
查看次数

在Angular.js应用程序中进行事件驱动开发的最佳实践是什么?

我正在为我们的角应用添加一些websocket功能.Websocket对象包含在服务中.理想情况下,我们希望我们的包装套接字对象具有标准事件API,以便我们可以在控制器中使用它,如下所示:(抱歉Coffeescript)

angular.module('myApp').controller 'myCtrl', ($scope, socket) ->
  update = (msg)->
    $scope.apply ->
      #do something regarding to the msg

  socket.on 'message', update

  unregister: ->
    socket.off 'message', update  
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳实践/图书馆是什么?使用jquery?Backbone.Events?任何建议都会有所帮助.谢谢!

javascript event-driven-design event-driven angularjs

12
推荐指数
1
解决办法
6630
查看次数

处理UI事件的最佳实践

我已经在OnCreate()上放置了UI事件的所有绑定代码.它使我的OnCreate()变得巨大.

在android中实现UI事件是否存在模式?我可以在View xml文件中添加方法,然后我可以将所有处理程序代码放在其他位置.

简而言之,我想我问我如何用android应用程序代码实现MVVM模式?

android event-driven-design android-layout

10
推荐指数
2
解决办法
3723
查看次数

在事件驱动的世界中处理异常

我试图了解如何使用微服务(使用 apache kafka)在事件驱动的世界中处理异常。例如,如果您采用以下订单场景,其中需要在完成订单之前执行以下操作。

  • 1) 向支付服务提供商授权支付
  • 2)从库存中保留该项目
  • 3.1) 通过支付服务提供商捕获付款
  • 3.2) 订购商品
  • 4) 发送电子邮件通知接受订单并附上收据

在这种情况下的任何阶段,都可能出现故障,例如:

  • 该商品不再有库存
  • 支付信息有误
  • 收款人使用的账户没有可用资金
  • 外部调用(例如对支付服务提供商的调用)失败,例如停机

您如何跟踪每个阶段已被要求和/或完成?

你如何处理出现的问题?你将如何通知前端失败?

event-driven-design event-driven

10
推荐指数
1
解决办法
1944
查看次数

事件驱动架构......无限循环

我有一个事件驱动的架构,其中A等待B的变化,B等待C的变化,C等待A的变化,形成一个循环.

现在,如果B发生变化,那么A会向C发射一个事件,该事件将激活到B,然后激活到A,激活到C ...无限制.

我现在可以改变我的程序,不包含这个循环,但我担心我可能会把自己放在一个角落,以后我不能.在设计基于事件的系统时,如何防止这些事情发生?

architecture events event-driven-design

9
推荐指数
2
解决办法
1866
查看次数

回合制游戏设计:事件驱动与游戏循环

我用Java创建了我的第一个游戏.这场比赛是垄断.我正在努力设计游戏以模拟其回合制结构(管理玩家转弯).我想允许单个人控和一个或多个AI控制的玩家玩游戏.

我的具体问题是我不知道是否实现游戏循环,这意味着可以管理玩家的循环以及与大富翁游戏直接相关的变量,(想想诸如提示每个玩家轮到他们的事情,将转弯增加到下一个玩家,或者依次从每个玩家获得骰子.我并不是指"游戏循环"这个术语的更低级含义,它更多地涉及屏幕上的绘图框架,更新物理或以特定的时间更新AI.

我的理解是,我尝试实现我需要的选择是:

  1. 实现完全事件驱动的程序,没有这样的游戏循环,或
  2. 实现一个游戏循环 - 一个在后台长时间运行的东西,只要游戏运行,基本上永无止境.这将是更具程序性的方法.

当我第一次尝试解决这个问题时,我遇到了我的UI冻结的问题,因为我的游戏循环永无止境,并且完全消耗了它运行的线程(我只是做了一个非常简单的while循环来说明这一点) .所以我开始创建一个SwingWorker封装我的游戏循环的努力.这解决了UI冻结的问题,但仍然让我想知道我是否走错了路.

作为一般规则,我发现网上的大多数建议似乎都支持任何事件驱动的方法,因此我目前使用a的实现SwingWorker可能是朝错误方向迈出的一步.但是我无法完全理解如何为这个特定任务实现一个完全事件驱动的系统(意味着没有游戏循环存在).在我看来,一个循环必须存在于某个地方,以管理玩家转弯.

以下是我的具体问题:

  1. 游戏循环(正如我所描述的那样)适用于回合制游戏,例如Monopoly--专门用于排队玩家轮流并提示适当的玩家轮流,一次一个玩家(并排队整个过程/序列包含转弯的步骤)?
  2. 如果要创建一个纯粹的事件驱动系统来管理玩家回合,你如何迭代每个玩家来提示他们轮到他们并继续迭代直到游戏结束?
  3. 如果要使用游戏循环来解决上述特定问题,是否必须在自己的线程中运行(可能使用SwingWorker)以避免冻结UI?我的情况是特定于Java的,但我想我也会对非Java特定情况的答案感兴趣.

目前,我使用MVC模式组织了我的代码.我的控制器是我的游戏循环(实际SwingWorker线程)所在的位置.它远非完整,但它有助于说明我如何管理玩家转向我称之为"游戏循环".

SwingWorker 控制器的代码:

swingWorker = new SwingWorker<Void, Model>() {
@Override
protected Void doInBackground() throws InterruptedException {
gameLoopRunning = true;
while (gameLoopRunning) {

    //to do: use a timer instead of thread.sleep
    Thread.sleep(1000);

    //user turn prompt
    if (model.getActivePlayer().isUserControlled()) {

        boolean userRolled = false;
        while(!userRolled) {
            System.out.println("Roll the dice please...");
            Thread.sleep(3000);
        }

    }
    //bot turn prompt
    else {
        //insert code for …
Run Code Online (Sandbox Code Playgroud)

java events event-driven-design swingworker

9
推荐指数
1
解决办法
1万
查看次数

同步关注的事件溯源

我努力理解如何使用可以支持同步请求的事件源来设计一个由事件驱动的后端。据我所知,要利用事件溯源,您必须开发系统来对事件做出反应,以便在必要时可以重播它们以重新创建您的状态。为此,这意味着我们正在尝试将事件触发器和事件处理程序解耦。

如果我们假设一个客户端发送请求更新某些数据的情况,我们如何在使用事件驱动系统时适应这种同步请求/响应模型?您会说以下步骤是以事件驱动方式处理请求的正确方法吗:

  1. 在 API 网关或网络边缘的某些服务接收网络请求,并发出表示此请求的事件。此时API网关会挂起等待。

  2. 发出的事件由事件存储捕获并记录

  3. 具有处理更新的业务逻辑的服务在订阅事件存储时捕获事件。如果它能够处理更新,则会产生成功事件,如果无法处理则产生错误事件。

  4. API 网关接收它正在等待的成功或错误事件之一,并最终将响应发送回浏览器。

我认为以上对分离关注点做了很多工作,但我怀疑这是否是通过接受来自外部客户端的请求的系统启用事件源的方式。

architecture event-driven-design microservices

9
推荐指数
1
解决办法
1695
查看次数