了解 Azure 服务总线
Azure 服务总线是一个完全托管的企业消息代理,其中包含消息队列和发布订阅主题。 可使用服务总线将应用程序和服务分离。 数据通过消息在不同的应用程序和服务之间传输。 消息是用元数据修饰的容器,它包含数据。 数据可以是任何类型的信息,包括以常用格式编码的结构化数据,例如:JSON、XML、Apache Avro 和纯文本。
一些常见的消息传送方案包括:
- 消息。 传输业务数据,例如销售或采购订单、日志或库存变动。
- 分离应用程序。 提高应用程序和服务的可靠性和可伸缩性。 客户端和服务不必同时处于联机状态。
- 主题和订阅。 启用发布者和订阅者之间的 1:n 关系。
- 消息会话。 实现要求消息排序或消息延迟的工作流。
服务总线层级
服务总线提供基本层、标准层和高级层。 服务总线消息传递的高级层解决了关于任务关键型应用程序的规模、性能和可用性方面的常见客户请求。 对于生产方案,建议使用高级层。 虽然功能集几乎完全相同,但这两个层的服务总线消息传送旨在满足不同的使用情形。 有关可用层的详细信息,请访问服务总线定价。
下表突出显示了高级层与标准层之间的一些大致差异。
高级 | 标准 |
---|---|
高吞吐量 | 可变吞吐量 |
可预测性能 | 可变滞后时间 |
固定定价 | 即用即付可变定价 |
增加和减少工作负荷的能力 | 空值 |
消息大小最大为 100 MB | 消息大小最大为 256 KB |
高级功能
服务总线包括用于解决更复杂消息传送问题的高级功能。 下表介绍了其中一些功能。
Feature | 说明 |
---|---|
消息会话 | 若要在服务总线中创建先进先出 (FIFO) 保证,请使用会话。 使用消息会话,可以排他、有序的方式处理一系列无限多的相关消息。 |
自动转发 | 自动转发功能可将队列或订阅链接到同一命名空间中的另一个队列或主题。 |
死信队列 | 服务总线支持死信队列 (DLQ)。 DLQ 保留无法传递给任何接收方的消息。 使用服务总线可以从 DLQ 中删除这些消息并对其进行检查。 |
计划的传递 | 可以将消息提交到队列或主题,以便进行延迟处理。 可以计划作业,以便在特定时间可供系统处理。 |
消息延迟 | 队列或订阅客户端可以延迟一段时间检索消息。 该消息将保留在队列或订阅中,但会搁置处理。 |
事务 | 一个事务将两个或更多操作组合成执行作用域。 服务总线支持对单个事务作用域内的消息传送实体执行分组操作。 消息实体可以是队列、主题或订阅。 |
筛选和操作 | 订阅者可以定义他们希望从主题接收的消息。 这些消息采用一个或多个命名订阅规则的形式指定。 |
出现空闲队列时自动删除 | 可以使用“出现空闲队列时自动删除”功能指定一个空闲时间间隔,该时间间隔过后系统会自动删除队列。 最短持续时间为 5 分钟。 |
重复检测 | 错误可能会导致客户端对发送操作结果产生怀疑。 利用重复检测功能,发送方可以重新发送相同的消息,队列或主题可以丢弃任何重复的副本。 |
安全协议 | 服务总线支持多种安全协议,例如共享访问签名 (SAS)、基于角色的访问控制 (RBAC)、适用于 Azure 资源的托管标识。 |
异地灾难恢复 | 在 Azure 区域数据中心遭遇停机的情况下,可以使用异地灾难恢复在其他区域或数据中心进行数据处理,以实现连续运行。 |
安全 | 服务总线支持标准的 AMQP 1.0 和 HTTP/REST 协议。 |
符合标准和协议
服务总线的主要网络协议是高级消息队列协议 (AMQP) 1.0,它是一项开放式 ISO/IEC 标准。 它允许客户编写针对服务总线和本地代理(例如 ActiveMQ 或 RabbitMQ)的应用程序。 如果你想生成这样的抽象,AMQP 协议指南提供了详细信息。
服务总线高级版完全兼容 Java/Jakarta EE Java 消息服务 (JMS) 2.0 API。
客户端库
可通过 Azure SDK 使用完全受支持的服务总线客户端库。
- 适用于 .NET 的 Azure 服务总线
- 适用于 Java 的 Azure 服务总线库
- 适用于 Java JMS 2.0 的 Azure 服务总线提供程序
- 适用于 JavaScript 和 TypeScript 的 Azure 服务总线模块
- 适用于 Python 的 Azure 服务总线库