我正在尝试将我们的新内部网(ASP-MVC)与我们的寻呼机系统的Web前端接口。寻呼机系统的前端大约有10年的历史,界面很差,没有文档。为此,我将内部网上的表单发布到服务器上,然后我们的服务器将HTTP POST发送到寻呼机服务器,模拟其自己的表单发送的内容。
在测试这个过载时(我们几乎同时发送了大约10条消息),寻呼机服务器崩溃了,因为系统是一个黑盒子,我们注意到的唯一区别是并发POST我们能做的最少就是尽量防止这种情况发生
我希望所有消息都进入一个每5-10秒最多发送一次的队列,但我不知道如何实现这个,有没有人有任何建议或链接到一些基本的教程来让我开始请?
更新
我之前没有指定这个,但是从浏览器的角度来看,该过程应该是同步的,即webserver从浏览器获取http POST请求,消息被放入队列,消息从队列发送, webserver将http响应发送到浏览器。这不是一个高容量的服务,我希望同时发出的请求很少,因此响应将近乎即时,这可以防止并发请求的潜在问题。
答案 0 :(得分:1)
假设您不想丢失任何请求,您的队列需要持久化。您可以汇总自己的实现并将数据放入数据库,也可以将MessageQueue用作现成的后备存储。您的Intranet站点将推送(发送)消息到数据库或MSMQ。您可以编写Windows服务或计划的控制台应用程序以从队列中读取(使用轮询),然后将数据发布到寻呼机系统。
以下是一些以消息队列开头的文章: http://www.primaryobjects.com/CMS/Article77.aspx和 http://msdn.microsoft.com/en-us/library/system.messaging.messagequeue.aspx
答案 1 :(得分:1)
听起来像是排队消息的工作! :)
Windows上的一些选项,没有特别的顺序,是:
通过所有这些实现,您将寻呼机消息插入队列,然后使用工作进程从队列中弹出消息并发送到下游服务。您的工作人员将控制队列中的流量。
如果寻呼机服务由于某种原因而中断,则不发送消息 - 它将留在队列中再次重试。
在谷歌搜索“[插入技术在这里]入门”,我相信您将获得足够的信息和示例代码供您开始使用。
<强> MSMQ 强>
MSMQ平坦的岩石,易于使用。它具有一些开箱即用的限制,例如4MB消息大小和使队列高度可用(每个队列实例通常由服务器上的本地存储支持)。
如果您拥有队列的两端(发送者和接收者),可以轻松克服4MB的消息大小,因为您可以通过队列将消息分块(将4MB的消息分成较小的块并在接收器上重新组装。 / p>克服HA限制通常需要协助存储和群集资源 - 它可能更容易从源系统恢复消息而不是群集MSMQ的傻瓜(这对我来说听起来不对,但一直是我的经验 - 会喜欢MSMQ关于成功的HA的博客。)
Service Broker
Service Broker是内置于Sql Server中的一个很好的点对点排队解决方案(甚至Sql Express也有)。它唯一的缺点是缺乏工具,这使配置管理变得困难。
如果您有来自单个队列的多个队列使用者,那么Service Broker是一个不错的选择...这就是假设Sql Server是HA的HA排队解决方案。
自定义Sql队列
如果您愿意通过T-SQL控制批处理工作单元,这可能是一个不错的选择。 Service Broker将为您处理的事情。
如果您有来自单个队列的多个队列使用者,则自定义SQL队列是一个不错的选择...这使得HA排队解决方案假定Sql Server是HA。
第三方排队产品
有许多第三方排队产品可以在这里插入 - 尽管它们可能不是Windows,甚至不是.NET特定的。如果您的环境希望实现“作为服务排队”,这可能是一个很好的解决方案。您可以为许多良好的排队实现获取.NET绑定。查看Advanced Message Queueing Protocol的实施以获取更多信息。