我正在寻找有关如何使用最新技术创建定期轮询过程[应用程序]的建议/指导/示例。
我有一个Web应用程序,它根据Users操作将条目插入到队列表中。该条目表示执行某些操作的请求。处理完条目后,它将从队列中删除。在处理之前,队列中可以有多个请求。
我想每隔3分钟,24 x 7轮询该队列表,然后启动一个'进程'来处理请求。
此定期轮询过程[应用程序]是应该是控制台应用程序,WCF服务还是常规Web服务?我应该使用多线程技术来处理在给定“轮询”时间(每3分钟)可能在队列中的多个请求吗?
我在谷歌时看过几个民意调查的例子,但他们看起来已经过时了。有些使用线程,其他任务,定时器等。
有点困惑的是什么是最好的方法。任何“最佳实践”建议/指导/示例都将非常受欢迎。
答案 0 :(得分:0)
嗯,当您需要进行远程处理时,WCF服务主要是有用的,在您的情况下,您的轮询是自治的,因此除了单个线程之外根本不需要任何其他内容。做你想做的最简单的方法是标准的Windows服务。在您的服务中,以无限循环启动一个线程。在里面,输入你的代码来检查队列并处理它,然后暂停3分钟(Thread.Sleep(180000))。
在处理由您决定的队列时进行多线程处理,并且对轮询本身没有影响。要运行的任务是否需要很长时间?并行性会提供明显的优势吗?取决于您是否希望处理数千个请求或每个轮询五个,或者如果要运行的任务可能需要超过3分钟,您的答案将会有所不同。
最简单的例子:
Private Const pollingRefreshMs = 180000
Private pollingThread As New Thread(AddressOf PollQueue) With {.IsBackground = True}
Protected Overrides Sub OnStart(ByVal args() As String)
pollingThread.Start()
End Sub
Protected Overrides Sub OnStop()
' Abort the polling thread when the service is stopped.
pollingThread.Abort()
End Sub
Private Sub PollQueue()
Dim bAborted As Boolean = False
Do
Try
' Check queue and process items here, possibly spawning a separate thread for each item...
Thread.Sleep(pollingRefreshMs) ' Pause the polling for 3 minutes.
Catch ex As ThreadAbortException
bAborted = True
End Try
Loop Until bAborted
End Sub
答案 1 :(得分:0)
一种非常简单的方法是编写一个简单的控制台应用程序来轮询您的表并执行必要的操作。它应该这样做一次并退出。从使用Windows任务计划程序定义的任务每三分钟启动一次控制台应用程序。