首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于消息的Windows体系结构

基于消息的Windows体系结构
EN

Stack Overflow用户
提问于 2011-09-05 10:38:50
回答 3查看 318关注 0票数 2

我正在制作基于Windows的网络系统,它处理来自不同来源的订单--网站或网站服务。在我脑海中出现的第一件事是使用Azure消息队列,从网站和web服务角色到一些实际处理订单的员工角色。

我发现很少有关于使用Azure的消息驱动架构的文章,它们看起来很好--我们正在从客户端获取消息,将其放到队列中,并响应用户"OK,您的操作已被处理“之后,该工作线程将读取该消息并执行所有魔术。,但是这里有一个问题,--如果我想将消息的处理结果(如果是成功的话是订单Id,如果不是的话是失败的原因)作为对客户端的响应,那么我需要等待直到Worker角色处理它。问题是,我没有找到好的/快速/廉价的方法来实现这一点,作为一种可能的方法,我可以将消息放入处理队列,并检查每个X msecs是否已经处理过(在处理之后,Worker将添加带有Y Guid的消息与结果一起处理的信息)。

我真的不喜欢这样等待的想法,因为订单处理的时间可以从几秒到几分钟不等,如果每个客户端(同时多达10-20个)检查每一个X毫秒是否处理了他的请求(主要原因),那么这将是系统上的额外负载。而且,考虑到Azure表的访问率(次要原因),它将相当昂贵。

你能建议一些好的方法来实现吗?我正在寻找类似事件的东西在桌面应用程序中等待,这是不能用Azure制作的,因为它是高度发行的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-05 12:20:38

您想要做的是通过浏览器将socket.io连接到web服务器,这样您就可以立即做出响应。.NET有一个彗星库,我从未使用过,http://pokein.codeplex.com/。我一直在Node.js中完成这个部分,这在Azure上是可能的,但可能需要一些努力才能运行。节点有一个处理socket.io连接的出色实现。

Web请求-> MQ -> web Services ->处理在Web上订购-> Web服务或再次在-> Socket.io/comet -> Web浏览器上订购->web服务。一切都是实时的,随着事件的发生。

如果您允许继续使用浏览器--网站,只会弹出一条消息,类似于“您的订单已被处理,请参阅这里的结果,当您准备好时”,结果通常是非常好的。

票数 1
EN

Stack Overflow用户

发布于 2011-09-05 22:05:49

您所描述的方法无疑是在执行此类操作时通常推荐的方法。

另一种方法是让角色实例直接对话。如果您愿意使用队列 (目前仍处于CTP中),那么这篇博客文章对建立角色间通信有一个很好的描述。

我相信这与其他答案中提到的服务巴士选择会有类似的结果。

票数 0
EN

Stack Overflow用户

发布于 2011-09-06 00:11:57

在web角色和工作角色之间使用TCP (套接字)。如果请求可能较慢,则将其设置为异步IIS请求(例如,使用MVC AsyncController),并让.Net线程处理web角色TCP代码。您还可以完成整个任务,并异步编写套接字代码。

当然,您需要在worker角色上配置一个内部端点,并使用Azure分配给它的端口(参见RoleEnvironment.Roles)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7306863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档