1

我正在移植一个旨在在非 Azure 环境中工作的应用程序。该架构的元素之一是无法扩展的单例,我希望用多个工作进程替换它,这些进程为单例当前提供的资源提供服务。

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

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

4

3 回答 3

1

似乎 Azure 服务总线队列是适合您的解决方案。

Azure 服务总线可以通过 3 种不同的方式使用:

  • 队列
  • 话题
  • 继电器

从 Windows azure 网站:

服务总线队列提供单向异步队列。发送方将消息发送到服务总线队列,接收方稍后会接收该消息。一个队列可以只有一个接收者

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

于 2013-09-22T19:39:47.707 回答
1

添加到戴维德的答案。

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

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

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

于 2013-09-23T05:22:41.747 回答
1

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

于 2014-03-11T12:28:00.047 回答