微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – Windows Azure上的作业队列设计

有人成功用于在Windows Azure上实现作业处理的设计是什么?

要求:

>能够将作业推入队列.
> N个工作人员可以从队列中使用作业并处理它们.
>工作的调用者应该能够被警告(推,而不是轮询)正在完成的工作.

迄今为止的研究:

>使用Azure服务总线队列创建“作业”队列(http://blogs.msdn.com/b/appfabric/archive/2011/05/17/an-introduction-to-service-bus-queues.aspx)
> Web前端将Jobs推送到队列,worker无限期地阻塞Receive()(参见http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.brokeredmessage.aspx),直到Job准备就绪(避免“null”长轮询,这会因API调用交易成本而花钱)

关于工作完成的通知

>当作业完成时,没有明显的警报能力.
我认为我可以利用服务总线主题/订阅(https://www.windowsazure.com/en-us/develop/net/how-to-guides/service-bus-topics/)并让呼叫者“订阅”“作业完成通知主题,但是:

>您显然无法多次订阅同一主题,除非您创建多个“订阅”条目(不会缩放)
>除非我们为每个作业ID创建了“订阅”,并且在该订阅上的Receive()API调用(使用I / O完成端口)上调用了块,否则我们无法获得有关作业的实时通知已经处理完毕.

以前有没有人有过实现这种Job系统的经验(实时,低延迟,有调用者的完成通知)?

谢谢

解决方法:

实际上,队列并不支持推送.关于队列的整个想法是接收者不需要实时接收消息,并且想要定期检查消息.如果需要实时通信,可以在接收方创建HTTP / TCP侦听器,让发送方发出HTTP / TCP请求.

因此,一种方法是使用内部端点在Web角色上创建Web服务.您使用队列将服务的地址以及消息发送到辅助角色.作业完成后,worker角色将调用该服务以通知Web角色该作业已完成.

这种方法很好,但它没有提供太多价值.它无法在UI上显示某些内容(除非您实现Web套接字),因为服务器无法通知浏览器.因此,如果您想在浏览器客户端中显示通知,我建议您使用拉解决方案(除非您实现Web套接字).如果您使用的是富客户端,则可以在客户端计算机上托管Web服务,并让worker角色通过调用该服务来通知客户端.

最好的祝福,

徐明.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐