每分钟检查一次WebAPI应用程序上的条件
本文关键字:应用程序 应用 程序上 条件 WebAPI 一次 检查 每分钟 | 更新日期: 2023-09-27 18:27:38
我正在学习使用Microsoft WebAPI开发基本的web应用程序。我创建了一个饮料订购服务,用户可以在其中订购饮料,并将其发布到服务器,服务器会存储这些饮料以备日后使用。
用户将他们的订单发布到OrdersController
上的RESTful端点。端点将顺序存储在列表中,并根据条件检查列表。例如,"订单数量是否大于5?")。如果满意,服务器会使用谷歌云消息服务向用户的手机发送推送通知。
我希望扩展可能触发推送消息的条件类型。例如,"如果在过去5分钟内没有收到订单,请发送推送通知"。换句话说,我需要更频繁地检查条件,而不仅仅是为了响应收到的新订单请求。
实现这一目标的最佳方法是什么?我最初的想法只是创建一个Timer,它每隔一段时间运行一次条件检查方法,但对堆栈溢出的搜索表明,这种方法可能是个坏主意。
根据托管环境,我有几个想法:
- 如果是您的服务器(虚拟或其他)
创建一个单独的应用程序,作为windows服务运行,或者创建一个与webAPI单独处理该进程的windows应用程序。
-
如果作为云应用程序在Azure上运行,您可以创建一个计划每隔几分钟运行一次的web工作者角色,然后可以查询和处理项目。
-
如果你只有MVC/WebAPI的托管环境,那么你可以研究缓存/回调技巧。当回调一个方法时,基本上将一个条目添加到缓存中。
a。创建一个控制器方法,将带有回调的缓存项添加到方法
b。该方法做它需要做的任何工作,然后调用控制器操作,以便在缓存中放置另一个条目。
每次缓存超时时,它都会调用回调方法,您可以使用该方法来处理信息,然后调用控制器方法来重新启动进程。
当我尝试这一点时,我创建了一个小的日程安排项目,该项目在任务列表中循环。每个任务都负责确定是否需要进行任何处理。令人惊讶的是,它运行良好,服务器从未关闭进程。
请记住,如果你在云中托管,这将模拟活动和内存使用,这可能会花费你一些钱,尽管我认为这将是微不足道的。
- 我听说他们是调度解决方案,甚至可能是一个监控服务,它可以每隔几分钟调用一次WebAPI端点,其工作原理与回调方法非常相似。您可以在每次监控服务调用端点时检查是否需要进行处理
您可以使用Reactive Extensions:它允许您以声明的方式对与时间相关的事件进行编程,而不必处理超时和跟踪。您甚至可以通过控制时间本身来测试您的设置!
例如,要在某个不活动状态后触发事件,可以使用observable的Timeout
方法。Buffer
方法可以让小组在点了x杯饮料后触发一个事件,等等
通常,您所描述的听起来像是后端任务/责任。您可以考虑使用此库HangFire.io从ASP.NET安全地执行此操作-http://hangfire.io/
对于简单的一次性情况,您可以通过ASP.NET模拟事件触发的另一种方法是,您可以使用内置缓存及其过期事件。