azure - 如何在使用CQRS方法构建的系统中运行周期性任务?

标签 azure architecture cloud cqrs cloud-hosting

事实证明,我的系统中需要一些定期任务,这些任务在 Windows Azure 辅助角色下运行。我想强调,它可以是任何平台Azure、Amazon、内部解决方案。就通常的系统而言,这不是如何完成任务的问题,但由于我们在云中并且可能有多个我的角色实例,因此在某些时候可能会出现问题。

所以这是我能想到的几种方法:

  1. 通常的计时器是通过 azure 存储进行同步的,这样就不会多次运行任务。您可以自己实现它,也可以从 Lokad 获取一个。您可以在计时器事件上内联执行任务,也可以将命令发送到队列中。

    优点:

    • 常见方法,每个人都知道计时器以及如何 cooking 它们
    • 不需要有一个状态。一旦您的实例启动,计时器也会启动并运行

    缺点:

    • 主要部分旁边还有初始化计时器并执行它们的附加逻辑,主要部分仅负责处理队列中的命令和事件。

  2. 一旦我收到启动任务的命令,我就会发送命令 StartTask(30 秒)。一旦命令处理程序收到它,它就会执行需要完成的操作,然后延迟 30 秒重新抛出相同的命令。

    优点:

    • 完美契合 CQRS 设计
    • 没有与计时器相关的额外逻辑,纯 react 堆

    缺点:

    • 打破范式,CQRS本身从一开始就很难处理和使用。人们倾向于使用已知的技术(通常的计时器),即使它不适合设计(cqrs 方法),结果我们得到了困惑的融合。
    • 又一个被打破的范式。系统重启时是无状态的还是有状态的?我想说存储的状态是在代理消息传递环境中。您所需要做的就是遵循消息处理规则。

我对此的看法:

就我个人而言,我确实赞成第二种方法,它的所有缺点都应该转移到优点部分。

问题:

这里的最佳实践是什么?我错过了什么吗?

最佳答案

我的建议是选择另一个组件来负责周期任务的执行。这样您就可以决定它的行为方式并使其与 CQRS 工作人员分开扩展。

如果您希望在 Azure 中使用 1 个实例处理这两项任务(定期任务和 CQRS),您可以将它们转换为 Windows 服务并使用您的辅助角色作为安装者和观察者。我有一个使用 my solution here 构建的示例.

顺便说一句,如果您使用 Lokad.Cqrs,那么您的第二种方法如果与主组件分离,听起来不错。

关于azure - 如何在使用CQRS方法构建的系统中运行周期性任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15848705/

相关文章:

azure - 针对不同环境的一个或多个关联组?

amazon-web-services - Kubernetes (GKE/AWS/Azure) 针对大型作业的扩展

asp.net - 在 asp.net 中定义常量的最佳方法

php - Google 云打印和功能 PPD

java - 从 EJB 创建文本文件,无需 java.io

ios - 我如何组织我的代码以选择性地为我的逻辑层提供支持 View ?

cloud - 如何从我的本地计算机访问 GCP 的 VM 实例?

asp.net-mvc - 添加 TwilioController 基类继承后,Microsoft Azure MVC 3 Web 角色未启动

c# - 如何监控Azure云服务辅助角色-PAAS上的本地存储磁盘空间

用于搜索 displayName 包含特定术语的组的 Azure 图形 api