我研究了为Web应用程序排队的概念(即将某些类型的作业放入队列中以供单独的工作人员完成,而不是在Web请求周期中完成).
我想知道是否有任何好的解决方案可以在ASP.NET MVC环境中使用.
有没有人有任何(好的或坏的)经历?
谢谢!
更新:
只是为了澄清,我不是在谈论排队传入的请求.我会试着说明我的意思......
1)标准情况:
2)我正在研究的内容:
在另一个过程中(可能在发送响应之后):
在第一个实例中,用户已经等待了很长时间来进行服务器重新计算,在第二个实例中它很快.
当然,某些类型的工作适合于此,有些则不适合.
UPDATE2:
客户端不必立即使用长作业的结果进行更新.只要用户碰巧刷新页面(当然,在作业完成之后),这些更改就会在应用程序中显示出来.
想想堆栈溢出中发生的一些事情 - 它们不会立即在应用程序的每个部分更新,但这种情况很快发生 - 我怀疑其中一些工作正在排队.
我正在使用Catalyst框架编写Web应用程序.我还使用了一个名为TheSchwartz的作业队列.
我想要使用作业队列,因为我希望尽可能多的特定于应用程序的代码与Web应用程序接口代码分离.
基本上整个系统由三个主要部分组成:
因此理论上,GUI为爬虫创建作业,从而为"攻击组件"创建作业.
目前我在Catalyst中有一个Model,它实例化一个TheSchwartz对象,以便Web应用程序中的控制器可以将作业添加到作业队列中.
我还需要创建一些工作者脚本来持续监听(/检查数据库)新的作业,以便他们可以执行所需的操作.目前TheSchwartz的数据库特定内容是在Catalyst中的模型中,我认为我不能轻易访问Catalyst之外的内容?
我不想在模型中复制TheSchwartz作业队列的数据库连接数据,然后在我的作业工作者脚本中复制数据库连接数据.我应该在位于Catalyst外部的另一个类中包装TheSchwartz对象的创建,并在当前实例化TheSchwartz对象的模型中调用它吗?然后我也可以在工作脚本中使用它.或者我应该在配置文件中包含数据库数据并在需要时实例化新的TheSchwartz对象(在Catalyst /内部作业工作者脚本中)?
或者我只是在想这个?
一些内容丰富的Web应用程序架构文章的链接也可能很有用(我之前从未构建过一种复杂的复杂性).
干杯
有人指出,我遇到这个问题的原因是由于程序4.9,所以我继续更新到proguard-5.2.1.但我仍然遇到同样的问题.有没有人找到解决方案?我通过确认了新版本
java -jar /projects/tools/android-sdk-macosx/tools/proguard/lib/proguard.jar
Run Code Online (Sandbox Code Playgroud)
我proguard-rule.pro很简单
#---- Google Cloud Endpoint section
# Needed by google-api-client to keep generic types and @Key annotations accessed via reflection
-keepclassmembers class * {
@com.google.api.client.util.Key <fields>;
}
-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault
-dontwarn com.google.api.client.**
-dontwarn com.google.common.**
#---- Twitter
-include ../proguard-com.twitter.sdk.android.twitter.txt
-dontwarn okio.**
#---- Remove Logging
? -assumenosideeffects class android.util.Log {?
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);?
public static int e(...);
? }
#---- support design
-dontwarn …Run Code Online (Sandbox Code Playgroud) (这里提到的关于这个主题的大多数问题都有点陈旧,我想知道那些年来Node生态系统发生了哪些变化.)
我基本上是想在node.js的应用程序中实现一个作业队列.我听说过Sidekiq在Ruby世界中的行动以及它的工作有多棒,并且想知道节点中是否存在类似的东西.
工作人员将使用Javascript编写,因此它不必是多语言(如果是,那就很好,但绝对不是必需的).
一个很大的优点是可视化当前正在运行的作业,失败的作业等.
你们用的是什么?你知道哪些lib /服务符合这些要求?
我有一个作业队列(使用Amazon SQS),它将作业交给许多机器,用于通过HTTP获取和处理各种文档.有数百个不同的主机被访问,并且没有可预测的作业顺序.
为了礼貌,我不希望我的系统在一台主机上反复敲击.因此,如果我得到一份工作#123从example.com获取某些内容,但我发现我在过去的X秒内刚刚从example.com获取了另一件事,我应该转向其他内容并保存作业#123 for后来.
问题是,实现这种模式的好方法是什么?
似乎第一步是让作业运行者在所有域的某个位置保留一个列表,并且最后一次访问该域上的某些内容.我想这可能是一个简单的数据库表.
如果消息处理器获得必须延迟的作业,则有许多可能的选项可用于执行操作.
只需将消息的副本推送到队列的末尾,然后将其丢弃而不执行它.希望在下一次出现时,足够的时间过去了.这可能会导致大量冗余SQS消息,尤其是在同一域的大型作业集群同时通过的情况下.
在礼貌要求可以执行工作之前,需要休息几秒钟.这可能导致许多队列处理器同时无所事事.
接受作业,但将其保存在每个队列处理器上的某个本地队列中.我想每个处理器都可以通过这种方式"声称"一些工作,然后选择以任何顺序处理它们以达到最大程度的礼貌.这仍然是不可预测的,因为每个队列处理器需要知道被其他所有域击中的域.
为每个域建立单独的队列,并为每个队列分配一个进程.每个进程都必须在执行每个作业之间暂停X秒,因此会有很多睡眠进程开销,但这可能不是一件坏事.
你有设计这种东西的经验吗?你会推荐什么策略?
parallel-processing perl design-patterns job-queue amazon-sqs
我在node.js中寻找一个可以由php调用的作业队列管理器.这适用于需要发送电子邮件,创建pdf文件等的Web应用程序,我想要执行php进程的异步操作.
过程示例:
为什么这个"复杂"系统?
该系统的使用案例:
最后,我们还想使用node-cron来执行非系统范围的cron任务(非常特定于应用程序).Node-cron将调用作业队列管理器,随后将运行php脚本.
节点中是否有这样的应用程序?
有没有人有类似于Path的Android优先作业队列的iOS作业队列,他们不介意与社区分享?我是iOS的新手,所以我不确定平台本身是否提供了这样的解决方案.在Android上没有这样的东西存在所以我不得不使用Path慷慨提供的库.如果iOS本身或Xcode有这样的解决方案/ API请指点我.如果不是,请分享你的,如果你不介意.谢谢.
基本上我正在寻找一个工作队列,即使没有网络也可以允许用户将数据发送到服务器:这意味着即使用户应该关闭iPhone,队列也会保留数据.然后在稍后的某个时间,当系统检测到网络时,将数据推送到服务器.
SO上已经存在类似的问题所以我将其包含在内以获取更多细节:如何在android上排队数据以进行服务器调度.不同的是,我的问题是iOS,他们的问题是Android.
用例
我的情况是想象用户正在地铁(没有网络)登上火车,但决定发送电子邮件.然后关闭应用程序,甚至关闭手机.然后一小时后,当用户重新打开手机后,当检测到网络时,应用程序会发送电子邮件.
我需要确保添加到队列中的同一作业在一段时间内不会重复。
\n\n是否值得D/M/Y-HH:M在我的独特中包含部分时间戳(即)jobId,以便仅在不在同一分钟内时才进行处理?
如果在 处添加一项作业,在 处添加12:01另一项作业,它仍然会重复12:09\xe2\x80\x93,它仍然会重复,或者 Bull 是否有更好的方法来做到这一点?
由于芹菜是一个工作队列/任务队列,名称说明它可以维护其任务并对其进行处理。那么为什么它需要像rabbitmq或redis这样的消息代理?
在我的webapp中,用户可以创建需要生成并在每个月的某些日期发送的定期发票.例如,可能需要在每个月的5号发送发票.
我正在使用Kue来处理我所有的后台工作,所以我也想在这种情况下这样做.
我目前的解决方案是每小时setInterval()创建一份processRecurringInvoices工作.然后,此作业将从数据库中查找所有定期发票,并generateInvoice为每个定期发票创建单独的作业.
然后,generateInvoice作业将实际生成发票,如果需要,还将创建sendInvoiceToEmail将通过电子邮件发送发票的作业.
目前这个解决方案对我来说很好,因为它有一个很好的关注点,但是,我有以下问题:
processRecurringInvoices工作上调用done()之前,我不确定是否应该等待所有"子"工作完成?processRecurringInvoices工作岗位,还是应该为每项工作单独处理?processRecurringInvoices或任何子作业仍在运行,processRecurringInvoices则不会再次创建作业?有点像独特的工作,还是互相排斥?job-queue ×10
node.js ×4
perl ×2
amazon-sqs ×1
android ×1
architecture ×1
asp.net ×1
asp.net-mvc ×1
bull.js ×1
catalyst ×1
celery ×1
ios ×1
ios7 ×1
javascript ×1
kue ×1
objective-c ×1
php ×1
proguard ×1
queue ×1
rabbitmq ×1
worker ×1