Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 是否存在基于特定标准触发用户定义警报的模式?_Ruby On Rails_Ruby_Esper - Fatal编程技术网

Ruby on rails 是否存在基于特定标准触发用户定义警报的模式?

Ruby on rails 是否存在基于特定标准触发用户定义警报的模式?,ruby-on-rails,ruby,esper,Ruby On Rails,Ruby,Esper,我们需要允许用户设置警报,并在使用特定标准创建或更新特定对象时收到通知(例如,类别在列表中,数量大于X…) 我考虑过两种方法: 使用create和update上的observer模式来评估针对该对象的所有规则,以查看它们是否被触发(这可能需要排队) 运行后台任务,定期对所有对象运行所有规则 前者似乎更“实时”,但如果我们每秒创建2个对象,那么我们将对规则进行大量评估。 后者在这方面会更有效率 这两种方法似乎都很密集(我们预计约500条规则和10-20000个对象),我想知道是否有更有效的方法

我们需要允许用户设置警报,并在使用特定标准创建或更新特定对象时收到通知(例如,类别在列表中,数量大于X…)

我考虑过两种方法:

  • 使用create和update上的observer模式来评估针对该对象的所有规则,以查看它们是否被触发(这可能需要排队)
  • 运行后台任务,定期对所有对象运行所有规则
前者似乎更“实时”,但如果我们每秒创建2个对象,那么我们将对规则进行大量评估。 后者在这方面会更有效率

这两种方法似乎都很密集(我们预计约500条规则和10-20000个对象),我想知道是否有更有效的方法。。。或者是一条正确的道路

实时评估规则是一个不错的选择,但不是强制性的,我们可以每6小时运行一次任务

我看过Esper for Java和.net,但这看起来不像是Ruby的选项(+这似乎有点过分,如果可能的话,我会避免添加依赖项)


我们有一个运行ruby 2.0的Rails 4.1应用程序,为什么不是一个组合:一个生成后台作业的观察者(DelayedJobs,Sidekiq)。后台作业可以立即启动(取决于队列长度),但不会减慢web请求的速度。Esper中没有“评估所有规则”,因为它不是请求-响应规则引擎。Esper是一个连续查询引擎——设计您的事件和连续查询,使其在满足模式或触发阈值的事件到达时触发。我建议查看顶部页面链接的“解决方案模式”页面。