销售电话: 1-800-867-1380

迁移使用消息传递技术的应用程序

更新时间: 2014年1月

作者:Kun Cheng
供稿人:Sreedhar Pelluru、Valery Mizonov、Christian Martinez、Rama Ramani
审校:Steve Howard、Seth Manheim

消息队列通常供应用程序用来彼此进行通信或在应用程序自身的组件内进行通信。在设计现代应用程序的体系结构时,结构设计师和开发人员可以使用消息队列来建立一个异步通信通道。消息队列使发送者无需等待来自接收者的响应,即可发送消息并继续执行其他任务。接收者独立地接收和处理消息,而不阻止发送者。此机制有助于解除应用程序的原本紧密集成的组件之间的关联,并使您可能获得更灵活且可伸缩性更高的解决方案。

当将应用程序从本地迁移到 Windows Azure 时,我们建议结构设计师和开发人员检查当前的体系结构,并确定使用 Windows Azure 队列或 Microsoft Azure Service Bus 来利用松散耦合的体系结构的可能性以及进行扩展的能力(特别是在 Windows Azure 平台上)。

Windows Azure 队列基于 Windows Azure 存储,并提供基本的排队机制以支持点到点通信。Windows Azure 队列支持通过基于 REST 的 HTTP 或 HTTPS 进行访问。每个消息队列支持的容量高达 100 TB(当前存储帐户的限制值)。每条消息的大小可高达 64 KB。有关详细信息,请参阅本文


Windows Azure 队列的最常见用途是供作为发送者的 Web 角色对工作项进行排队。您还可以在作为接收者的辅助角色中使用它们,以异步方式对工作项取消排队并进行处理。


Windows Azure 平台还通过 Service Bus 提供基于队列的消息传递。除了排队之外,Service Bus 还提供安全消息传递以及中继功能,以支持 Windows Azure 上的分布式应用程序或跨本地和 Windows Azure 混合部署应用程序。对于消息传递机制,Service Bus 既通过 Service Bus 队列支持点到点通信,也通过 Service Bus 主题和订阅支持发布-订阅 (pub-sub)。Service Bus 主题和订阅使多个订阅服务器可以同时侦听单个发布服务器。中继功能支持混合解决方案,在此类方案中,本地或私有云中的企业资产可以扩展并与云资源进行通信。Service Bus 支持通过基于 REST 的 HTTP/HTTPS 或 TCP 协议进行访问。每个 Service Bus 队列的容量可高达 5 GB。每条消息可高达 256 KB。

Windows Azure 队列与 Service Bus 队列有很多不同之处, 其中包括身份验证、事务支持和 WCF 集成。有关这两种排队技术之间的详细比较,请参阅文章 Windows Azure 队列和 Windows Azure 服务队列 - 比较与对比

Windows 应用程序通常使用 Microsoft 消息队列 (MSMQ) 作为排队机制。MSMQ 使在单独服务器上的单独进程中运行的应用程序能够以持久、松散耦合的方式彼此进行通信。它还使位于异构网络环境中的应用程序能够交换信息,甚至它们不同时在线也不例外。它提供有保障的消息传递、分布式事务支持、高效路由、安全性和基于优先级的消息传递。

当将依赖于 MSMQ 技术的应用程序迁移到 Windows Azure 平台时,请记住,Windows Azure 目前不支持 MSMQ。要进行迁移,您需要更改代码以使用 Windows Azure 队列。以下章节提供将依赖于 MSMQ 技术的应用程序迁移到 Windows Azure 平台的不同选项。

在许多方面,Service Bus 是 Windows Azure 所具有的与 MSMQ 最相似的功能。它们共享许多类似的功能,如基本排队操作、事务支持和死信。但是,使用 Service Bus 时,需要使用不同于 MSMQ 的 API,并且语义在很多方面也不同。下面的列表提供几个关键差异(以大小和性能来衡量):

  • Service Bus 消息大小上限为 256 KB(含标题和正文),而 MSMQ 消息的大小可高达 4 MB。

  • Service Bus 队列的大小上限为 5 GB。MSMQ 队列大小由计算机硬件或可配置的配额来限制。

  • Service Bus 队列吞吐量最高可达每秒 2,000 条消息。MSMQ 吞吐量可达每秒 6,000 条消息以上(基于 1k 基准)。有关更多详情,请参阅在 Microsoft 消息队列服务器环境中优化性能。.

为便于迁移,可以通过桥接在本地 MSMQ 与 Windows Azure 上的 Service Bus 之间建立关联。请参阅此处的示例代码。

Windows Azure 队列提供了一个基本的点到点通信通道。与 MSMQ 不同,Windows Azure 队列不支持异构环境。此外,它不以本机方式支持典型 MSMQ 环境所支持的功能,如自动死信、事务和排序保障。但是,应用程序开发人员可以在 Windows Azure 队列的基础上实现必要的功能,以获得与 MSMQ 类似的功能。不过,实现此功能需要进行应用程序自定义。

借助于 Windows Server 上的内置 MSMQ 支持,在同一节点上作为辅助角色运行 MSMQ 将具有本地 MSMQ 的全部功能。但是,辅助角色受制于故障转移和服务维护。当发生这种情况时,所有状态信息(如存储在本地 MSMQ 存储区中的消息)都将丢失且无法恢复。除非以无状态方式使用 MSMQ 且应用程序设计为能够处理角色故障转移情况,否则不建议在辅助角色实例中运行 MSMQ。

本文是否对您有所帮助?
(1500 个剩余字符)
感谢您的反馈
显示:
© 2014 Microsoft