Jim*_* G. 6 .net c# windows-services sample
需要:
通缉:
背景:
重点:
鉴于您正在处理数据库队列,由于数据库的事务性质,您可以公平地完成已经完成的工作.典型的队列驱动应用程序有一个循环:
while(1) {
Start transction;
Dequeue item from queue;
process item;
save new state of item;
commit;
}
Run Code Online (Sandbox Code Playgroud)
如果处理在中途崩溃,则事务回滚并在下次服务启动时处理该项目.
但实际上,在数据库中写入队列是很多棘手比你相信.如果你部署一个天真的方法,你会发现你的入队和出队相互阻塞,ashx页面变得没有响应.接下来你会发现dequeue与dequeue都是死锁,你的循环经常遇到错误1205.我强烈建议你阅读本文使用Tables as Queues.
您的下一个挑战是如何将汇集率"恰到好处".过于激进,您的数据库将从池化请求中炙手可热.太麻烦了,你的队列会在高峰期增长,而且排水太慢.您应该考虑使用完全不同的方法:使用SQL Server内置QUEUE对象并依赖WAITFOR(RECEIVE)语义的魔力.这允许完全轮询免费的自我调整服务行为.实际上,还有更多:您不需要服务开始.有关我正在谈论的内容的解释,请参阅异步过程执行:以完全可靠的方式从Web服务调用在SQL Server中异步启动处理.最后,,允许处理在独立进程中托管,而不是T-SQL过程.
根据您的编辑,我能想到的一些事情:
回复:工作失败:
回复:争论:
回复:保持服务运行
我真的只是在黑暗中摸索。我强烈建议对服务进行原型设计,并返回有关其运作方式的任何具体问题。
| 归档时间: |
|
| 查看次数: |
8504 次 |
| 最近记录: |