繁体   English   中英

WCF 和 MSMQ - 将消息从队列推送到服务?

[英]WCF and MSMQ - Push messages from Queue to Services?

我只是想知道这是否可行,或者我是否过于复杂。

我有一个需要与在多个工作站上运行的 WCF 服务进行交互的 Web 应用程序(我们称之为中央应用程序)。 即,用户将选择要向其发送消息的工作站,并且 Web 应用程序将需要调用每个工作站。 这些工作站不会一直在线,在最坏的情况下,可能有 600 多个工作站需要一次发送消息。

我正在考虑在中央机器上运行一个单独的 WCF 服务,该服务将充当 Web 应用程序(中央)和工作站之间的一种“代理”。 然后,Web 应用程序将使用消息列表对该服务进行一次调用,然后该服务将处理该列表并将消息添加到队列中。

从我到目前为止所读到的内容来看,工作站需要轮询这个中央队列以获取消息,但这似乎会增加相当多的开销。 当消息添加到队列时,是否可以将它们推送到工作站?

我以前从未使用过 MSMQ,而且我对 WCF 也很陌生,所以如果有更简单的方法来实现这一点,请告诉我。

我正在考虑在中央机器上运行一个单独的 WCF 服务,它将充当 Web 应用程序(中央)和工作站之间的一种“代理”

我认为您使用附加服务充当“代理”没有任何问题。

工作站将需要轮询此中央队列以获取消息

我可能会建议您在中央服务器上有一个中央“收件箱”要处理的消息。 “代理”然后在本地处理收件箱。 让网站将作业发送到代理。

推模型

对于工作站,不是让它们从服务器读取,而是让服务器将消息发送到工作站。 对每个工作站的唯一队列和队列位于工作站本身 让服务将针对工作站的消息发送到工作站的队列。 当来自中央队列/收件箱的每条消息都由代理处理时,代理从队列中删除所述消息并移至下一条。

MSMQ 性能

通常在 MSMQ 中,出于扩展的原因,最好进行网络写入而不是网络读取。 大量计算机都从同一个队列中读取数据对性能有害。 换句话说,让“中央”服务写入远程队列(当机器可用时,MSMQ 将负责传输消息)。

工作站需要轮询这个中央队列以获取消息,但这似乎会增加很多开销

正确的。 使用BeginRead 轮询对 CPU 有害和/或浪费好线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM