[英]Use MSMQ queue to decouple message producer and consumer?
对于将报告发布到SOAP服务的一些Windows服务(c#),我将不胜感激。
它从数据库中获取一组有限的报告(Oracle AQ表中的报告),将它们聚合到一条消息中,并将此消息转发给WCF SOAP服务。 如果已成功通过SOAP传输报告,则会将其标记为“已发送”。 否则,它们将再次添加到AQ表(通过db作业)。
所以我提出了以下设计。 什么是最好的方式去? 队列在可扩展性,稳健性,解耦方面是否会改进设计? 在这种情况下使用排队是一个好主意吗?
建议设计A:具有1到N个线程的服务。 每个线程同步处理报告(获取报告,聚合,翻译,通过SOAP发送)
建议设计B:Windows服务:
拟议设计C:
您选择MSMQ有特殊原因吗? 如果您使用建议的设计B,则可以使用BlockingCollection 。
我没有看到MSMQ在这种情况下提供了特别的优势,除非你想要多个进程或者你希望将它传播到多台计算机上。
但你真的需要多线程吗? 这里的限制因素似乎是数据库访问时间或与WCF服务的通信。 除非WCF服务必须先进行一些主要处理才能成功调用作业。
所以你确定你不能只有:
while there are unsent jobs in the database
get job
send job to WCF
if job sent successfully
mark job as sent
end while
显然,我对你的情况的了解仅限于你在问题中发布的内容,所以我可能错过了一些重要的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.