【发布时间】:2014-01-07 07:48:03
【问题描述】:
我将不胜感激有关 Windows 服务 (c#) 的一些设计建议,用于将报告发布到 SOAP 服务。
它从数据库中获取一组有限的报告(Oracle AQ 表中的报告),将它们聚合成一条消息,然后将此消息转发给 WCF SOAP 服务。 如果报告已通过 SOAP 成功传输,则将报告标记为“已发送”。 否则,它们会再次添加到 AQ 表中(通过 db 作业)。
所以我想出了以下设计。 最好的方法是什么? 队列会在可扩展性、健壮性、解耦方面改进设计吗? 在这种情况下使用排队是个好主意吗?
建议的设计 A: 具有 1 到 N 个线程的服务。 每个线程同步处理报告(获取报告、聚合、翻译、通过 SOAP 发送)
建议的设计 B: Windows 服务:
- 1个MSMQ消息队列
- 1 到 N 个生产者线程:(获取报告, 通过 MSMQ 聚合、排队消息)
- 1 到 N 个消费者线程: (通过 SOAP 出队、翻译、分配)
提议的设计 C:
- 具有生产者线程的 Windows 服务(通过 WCF NetMsmqBinding 客户端获取报告、聚合、将消息排队到私有 MSMQ 队列)
- IIS/WAS 托管启用了 MSMQ 的服务(侦听 MSMQ 队列、出队、翻译、通过 SOAP 分配)
【问题讨论】:
标签: c# multithreading wcf queue msmq