将长时间运行的任务从MVC Web App迁移到WebJob,会引用相同的项目和代码重用

本文关键字:引用 项目 代码 任务 运行 长时间 MVC Web 迁移 App WebJob | 更新日期: 2023-09-27 18:14:36

我是WebJobs的新手,我需要添加一个到我现有的MVC Web应用程序(托管在Azure中)来处理长时间运行的任务。长时间运行的任务执行一个ETL类型的过程,它调用几个外部web服务通过SOAP/XML检索数据,将该数据保存到SQL数据库,然后转换数据并将保存的数据加载回数据库。整个过程需要20-30分钟。

我最初有web应用程序负责启动和处理长时间运行的任务,但意识到这并不工作得很好,并已决定将此过程移动到WebJob。有道理吗?

长时间运行任务的大部分逻辑存在于服务层中,web应用程序中的Controller Action负责"启动"任务。

web应用正在使用Autofac for DI。

从web应用程序中共享/重用现有Autofac配置而无需在WebJob应用程序中复制代码的最佳方法是什么?也就是说,WebJob可以/应该引用MVC web应用程序项目?

将长时间运行的任务从MVC Web App迁移到WebJob,会引用相同的项目和代码重用

我想知道您是否仍然在实际解耦过程-从您的描述中很难判断。当你说控制器"启动"任务时——这是怎么发生的?您可能想要做的是,让控制器在存储队列上创建一个新消息,并在接收到同一队列上的新消息时触发webjob。这是解耦层的"标准"方法。webjobs api为存储队列内置了绑定。至于服务层的架构,如果你构建的应用程序(web应用程序和web作业)使用接口来调用服务层,并且接口和服务是在一个单独的程序集/dll中实现的,那么它应该可以很好地与任何DI容器工具(如Autofaq)一起工作——这与进程托管服务的方式无关。

进程1:Web App ->使用IJobService.CreateJob() ->将消息放到存储队列

进程2:Web Job [Trigger from Storage queue] -> use IJobService.Process() -> updates sql db