2

我正在考虑在基于一堆 WCF 服务的产品中添加队列功能。我已经阅读了一些关于 MSMQ 的内容,首先我认为这是我需要的,但我不确定并且正在考虑将队列放入数据库表中。我想知道这里的某个人是否得到了一些关于走哪条路的反馈。

基本上我打算有一个通过http调用的外观WCF服务。外观服务应该只将所有传入消息写入队列,以便对调用系统做出快速响应。然后,队列中的消息应由另一个组件处理,WCF 服务或 Windows 服务取决于我对队列的选择。

该产品在具有 2 到 n 个 Web 服务器的负载平衡环境中运行。

我正在考虑的选项和我得到的问题是:

  1. 让外观 WCF 写入 MSMQ,然后让另一个 WCF 服务从这个队列中读取来处理消息。从我所读到的内容中,我对这种替代方案没有信心的是,它将如何在负载平衡的环境中工作。

1A。MSMQ 应该放在哪里?每个网络服务器上一个?一个在单独的服务器上?多个在单独的服务器上?(不考虑冗余的需要,并且在极少数情况下数据可能会丢失并重新发送)

1B。如果我希望系统冗余,设计会如何影响?我希望能够在不丢失该队列中的数据的情况下丢失持有 MSMQ 的服务器(它永远不会再次联机)。从我所读到的有关 MSMQ 的信息中,我只能选择将 MSMQ 放在 Windows 集群上。那是对的吗?(我想避免为此使用 Windows 集群)。

  1. 第二种设计方案是让外观 WCF 服务将队列写入数据库。然后有两个或多个 Windows 服务来做队列的处理。我对这个替代方案没有任何疑问。如果您想知道为什么我不选择这个,因为它对我来说似乎更简单,那是因为我想构建它而不向解决方案引入任何 Windows 服务,我相信 MSMQ 具有我不想的功能自己编写代码,我也对使用 MSMQ 感到好奇,因为我以前从未使用过它。

最好的问候哈坎

4

2 回答 2

2

好的,所以您没有将 WCF 与 MSMQ 集成一起使用,而是使用 WCF 创建 MSMQ 消息作为最终产品。这将事情简化为“我如何对 MSMQ 进行负载平衡?”

您使用的安排是基于最适合您的。您可以让多个网络服务器将消息发送到中央机器上的远程队列。相反,您可以让网络服务器将消息放入本地队列,中央机器轮询队列中的新消息。

您不需要集群 MSMQ 以使其具有弹性。相反,您可以使您的代码具有弹性,以便它使用死信队列、事务队列、日志等来处理丢失的消息。硬件集群是一个简单的选择:-)

于 2011-05-04T19:07:06.433 回答
0

在阅读了有关 subjet 的更多内容后,我决定不使用 MSMQ。看来我真的没有理由走这条路。我需要它是非事务性的,据我所知,没有任何日记或死信技术可以帮助我满足我的冗余要求。

我所有的组件大部分时间都在线(当他们遇到访问问题时,每年可能有几个小时)。

MSQM 只会增加令人兴奋的解决方案的复杂性、另一种技术,可能还有另一个需要跟踪的服务器。

为了获得完全冗余以防止 MSMQ 中的数据丢失,我将需要一个 Windows 集群或实现对多个相同队列的发送/接收。我不想做这两件事。

所有这一切都导致我在接收应用程序的前面使用 WCF 外观,接受写入数据库队列的 http 调用。此数据库已受到保护,不会丢失数据。该队列将由包含所有繁重业务逻辑的 Windows Servce 的多个活动实例轮询。由于进程优先级较低,这些服务可以托管在负载平衡 Web 应用程序使用的现有节点上。如果我有时间使用 MSMQ,或者我的应用程序出于其他原因需要它,我可能会改变我的决定。

于 2011-05-10T09:30:52.917 回答