Azure Inter-worker进程通信

时间:2013-09-22 19:16:07

标签: c# asp.net wcf azure

我正在努力移植一个旨在在非Azure环境中工作的应用程序。该体系结构的一个元素是一个不能扩展的单例,我希望用多个工作进程替换为单例当前提供的资源提供服务。

我已经做了必要的更改来替换单例,并且正在构建通信框架以提供从UI服务器到资源工作者的互连,我想知道我是否应该只使用TCP绑定WCF服务或是否使用Azure Service Bus会更有意义。 TCP / WCF很简单,但无法解决完整的问题:如何确保只有一个工作程序处理UI请求?

从阅读可用的文档,听起来像服务总线将解决这个问题,但我还没有看到一个具体的实现示例。我希望有人能帮助和/或指出我正确的方向。

3 个答案:

答案 0 :(得分:1)

似乎Azure Service Bus 队列是适合您的解决方案。

Azure Service Bus可以以3种不同的方式使用:

  • 队列
  • 主题
  • 继电器

来自windows azure site:

  

Service Bus队列提供单向异步排队。发送方向服务总线队列发送消息,接收方稍后会接收该消息。一个队列只能有一个接收器

您可以在以下位置找到更多信息: http://www.windowsazure.com/en-us/develop/net/fundamentals/hybrid-solutions/

答案 1 :(得分:1)

加入Davide的答案。

另一种选择是使用Windows Azure Queues。它们旨在促进Web角色和辅助角色之间的异步通信。从您的Web角色中,您可以将消息推送到由工作者角色轮询的队列中。

您的工作人员角色可以"Get"来自队列的一条或多条消息并处理这些消息。当您从队列中获取消息时,您可以指示队列服务使这些消息在一定时间内对其他呼叫者不可见(称为message visibility timeout)。这将确保只有工作者角色实例才能处理消息。

一旦辅助角色完成了工作,它就可以简单地删除该消息。如果处理消息时出错,则一旦可见性超时期限到期,消息将自动重新出现在队列中。您可能会发现此链接很有用:http://www.windowsazure.com/en-us/develop/net/how-to-guides/queue-service/

答案 2 :(得分:1)

Azure队列不是为进程间通信而设计的,而是为应用程序间通信而设计的。消息传递延迟很大,无法保证传送时间。 Websockets或NetTcpBinding更适合与实时交谈的应用程序。虽然必须承认,你可以通过queuez获得一些免费的东西,尤其是锁定机制。只差我2美分