上篇博文中我们介绍了Azure ServiceBus Messaging的消息事务机制:
(2017-03-30 22:12)
本文中我们介绍一下ServiceBus Messaging的一些配额,或者说使用说明和限制。原文请参考:
https://docs.microsoft.com/zh-cn/azure/service-bus-messaging/service-bus-quotas
我们着重介绍在实际消息应用开发时,会用到的、需要重点关注的几个配额选项。
1. 命名空间上限:即每个 Azure 订阅的基本/标准命名空间数上限:100,
2. 队列/主题大小,即我们使用的Queue或者Topic的容量,白话一点就是消息队列能承载多少消息,我们在实际应用时,一定要做一个评估,评估有两个方面,一个是我们业务高峰期会有多少消息,即消息的QPS,另一个是,未来1~2年,随着业务规模的扩张,现有的Queue/Topic的容量是否满足我们未来发展的要求。
Azure ServiceBus Messaging中已经显式的说明:系统将拒绝传入消息,且调用代码将收到异常。
队列/主题的大小,在声明时指定,Azure ServiceBus Messaging提供了1、2、3、4 或 5 GB选项,同时,如果已启用分区,最大队列/主题大小是 80 GB。
相信这个大小是Azure已经评估过的,大多数场景和规模都可以满足。
3. 并发连接数,并发连接数,Azure在命名控制和队列、主题、订阅这个层面统一做了限制。其中:
命名空间上的并发连接数:NetMessaging:1,000,AMQP:5,000
队列/主题/订阅实体上的并发连接数:受每个命名空间的并发连接限制的约束;
队列/主题/订阅实体上的并发接收请求数:5,000
当超过并发连接数时:系统将拒绝后续的附加连接请求,且调用代码将收到异常。 同时,REST 操作不计入并发 TCP 连接数。
这点大家要注意!
4. 每个服务命名空间的主题/队列数:即我们在每个服务的Namespace上可以创建多少个队列或者主题,这项配额是10000,服务命名空间中主题和队列的数目之和必须小于或等
于 10,000。如果超过这个配额:将拒绝后续的在服务命名空间中创建新主题或队列的请求。 因此,如果是通过 配置的,将生成错误消息。 如果是通过管理 API 调
用的,调用代码将收到异常。
这个队列数和主题数限制对于大规模消息应用的开发来说是有影响的,我们如果使用多个Namespace就可以横向扩展队列和主题的个数,这有点上业界主流的Sharding机制。赞
一个。
5. 任一消息实体路径的最大大小:队列或主题,即消息队列或者主题名称的长度是:260个字符
6. 队列/主题/订阅实体的消息大小:这个选项对我们来说非常重要,直接影响我们构造消息的大小。最大消息大小:256KB()/1MB()。 注意由于系统开销问
题,此限制通常略小一点,最大标头(消息头)大小:64KB,属性包(消息属性)中的最大标头属性数:byte/int.MaxValue,属性包中属性的最大大小:没有明确的限制。 受最
大标头大小限制。
7. 队列/主题/订阅实体的消息属性大小:每个属性的最大消息属性大小为 32K。 所有属性的累计大小不得超过 64K。如果超过这个配额:将生成 SerializationException 异
常。
8. 每个主题的订阅数:即每个Topic可以有多少订阅,2000,如果超过这个配额:
Azure将拒绝后续的为主题创建附加订阅的请求。 因此,如果是通过门户配置的,将显示错误消息。 如果是通过管理 API 调用的,调用代码将收到异常。
周国庆
2017/4/11