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

WCF and MSMQ - Push messages from Queue to Services?

我只是想知道这是否可行,或者我是否把它复杂化了。

我有一个 Web 应用程序(我们称它为中心)需要与多个工作站上 运行 的 WCF 服务进行交互。也就是说,用户将 select 工作站发送消息,Web 应用程序将需要调用每个工作站。这些工作站不会一直在线,在 最坏的 情况下,可能需要同时向 600 多个工作站发送消息。

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

根据我目前所读的内容,工作站将需要轮询此中央队列以获取消息,但这似乎会增加不少开销。是否可以在将消息添加到队列时将它们推送到工作站?

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

I'm thinking of having a separate WCF service running on the central machine that will function as a sort of "proxy" between the web app (central) and the workstations

我认为您使用附加服务作为 "proxy" 没有任何问题。

the workstations will need to poll this central queue for messages

我可能会建议您在中央服务器上处理中央 "inbox" 消息。 "proxy" 然后在本地处理收件箱。让网站将作业发送到代理。

推送模型

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

MSMQ 性能

通常在 MSMQ 中,出于扩展原因,网络 写入 比网络读取更好。大量计算机都从同一个队列读取数据会影响性能。换句话说,让 "central" 服务写入远程队列(MSMQ 将在机器可用时负责传输消息)。

the workstations will need to poll this central queue for messages but this seems like it will increase overhead quite a bit

正确。使用 BeginRead。轮询对 CPU 有害 and/or 浪费一个好线程。