云服务器内容精选

  • Vhost 表2 Vhost约束与限制 限制项 约束和限制 删除Vhost 创建实例时创建的默认Vhost,不支持删除。 Vhost名称 RabbitMQ 3.x.x版本实例的Vhost名称以特殊字符开头,例如点号“.”,可能会导致监控数据无法显示。Vhost名称包含特殊字符,例如“%”、“|”、“/”,会导致Vhost名称与监控页面不一致,在监控页面中特殊字符会以“_”显示。例如:Vhost名称为Vhost.1%1|2_3/,此时监控中显示的Vhost名为“Vhost.1_1_2_3_”。 RabbitMQ AMQP-0-9-1版本实例的Vhost名称包含特殊字符,例如“%”、“|”、“/”、“.”,会导致Vhost名称与监控页面不一致,在监控页面中特殊字符会以“_”显示。例如:Vhost名称为Vhost.1%1|2_3/,此时监控中显示的Vhost名为“Vhost_1_1_2_3_”。
  • Exchange 表3 Exchange约束与限制 限制项 约束和限制 默认Exchange RabbitMQ 3.x.x版本在创建Vhost后会创建7个默认Exchange:(AMQP default)、amq.direct、amq.fanout、amq.headers、amq.match、amq.rabbitmq.trace、amq.topic。 绑定Exchange RabbitMQ 3.x.x版本中,名为“(AMQP default)”的Exchange不能绑定任何Exchange。 “Internal”为“是”的Exchange只能绑定Exchange,不能绑定Queue。 RabbitMQ AMQP-0-9-1版本的Exchange不支持绑定Exchange,只支持绑定Queue。 删除Exchange RabbitMQ 3.x.x版本中,默认Exchange不支持删除。 Exchange名称 RabbitMQ AMQP-0-9-1版本实例的Exchange名称包含特殊字符,例如“%”、“|”、“/”、“.”,会导致Exchange名称与监控页面不一致,在监控页面中特殊字符会以“_”显示。例如:Exchange名称为Exchange.1%1|2_3/,此时监控中显示的Exchange名为“Exchange_1_1_2_3_”。
  • Queue 表4 Queue约束与限制 限制项 约束和限制 绑定Queue RabbitMQ 3.x.x版本中,名为“(AMQP default)”的Exchange不能绑定任何Queue。 “Internal”为“是”的Exchange只能绑定Exchange,不能绑定Queue。 惰性队列 RabbitMQ 3.8.35及以上版本支持惰性队列。 仲裁队列 RabbitMQ 3.8.35及以上版本支持仲裁队列。 单一活跃消费者 RabbitMQ 3.8.35及以上版本支持单一活跃消费者特性。 Queue名称 RabbitMQ 3.x.x版本实例的Queue名称以特殊字符开头,例如点号“.”,可能会导致监控数据无法显示。Queue名称包含特殊字符,例如“%”、“|”、“/”,会导致Queue名称与监控页面不一致,在监控页面中特殊字符会以“_”显示。例如:Queue名称为Queue.1%1|2_3/,此时监控中显示的Queue名为“Queue.1_1_2_3_”。 RabbitMQ AMQP-0-9-1版本实例的Queue名称包含特殊字符,例如“%”、“|”、“/”、“.”,会导致Queue名称与监控页面不一致,在监控页面中特殊字符会以“_”显示。例如:Queue名称为Queue.1%1|2_3/,此时监控中显示的Queue名为“Queue_1_1_2_3_”。
  • RabbitMQ 3.x.x版本实例 RabbitMQ 3.x.x版本实例在监控页面中,队列名称存在两种显示。如果队列在默认Vhost下,会直接显示队列名。如果队列不在默认Vhost下,队列名称显示为:队列所在的Vhost名称__队列名。例如:队列test01在Vhost-13142708中,此时监控中显示的队列名为“Vhost-13142708__test01”。 RabbitMQ 3.x.x版本实例的队列名称或Vhost名称属于以下任一情况时,可能会导致监控数据无法展示。 RabbitMQ的队列名称以特殊字符开头,例如点号“.”。建议删除带特殊字符的队列。 RabbitMQ的Vhost名称以特殊字符开头,例如点号“.”。建议删除带特殊字符的Vhost。 图1 无法展示监控 RabbitMQ 3.x.x版本实例的队列名称或Vhost名称包含特殊字符,例如“%”、“|”、“/”,会导致队列/Vhost名称与监控页面不一致,在监控页面中特殊字符会以“_”显示。例如:队列Queue.1%1|2_3/在默认Vhost中,此时监控中显示的队列名为“Queue.1_1_2_3_”。 图2 Vhost详情页的队列名称 图3 监控页的队列名称
  • RabbitMQ AMQP-0-9-1版本实例 RabbitMQ AMQP-0-9-1版本实例的Queue名称、Vhost名称或Exchange名称包含特殊字符,例如“%”、“|”、“/”、“.”,会导致Queue名称、Vhost名称、Exchange名称与监控页面不一致,在监控页面中特殊字符会以“_”显示。例如:Queue名称为Queue.1%1|2_3/,此时监控中显示的Queue名为“Queue_1_1_2_3_”。 图4 Vhost详情页的Queue名称 图5 监控页的Queue名称
  • RabbitMQ版本差异 RabbitMQ 3.x.x版本和AMQP-0-9-1版本有部分的功能差异,具体如表1所示。 表1 版本功能差异 功能项 3.x.x AMQP-0-9-1 SSL √ × 公网访问 在RabbitMQ控制台开启公网 × 仲裁队列 √ × 镜像队列 √ × 优先级队列 √ √ 插件 √ × Web UI √ × 重置实例密码 √ × 变更实例规格 √ √ 用户管理 在Web UI设置 在RabbitMQ控制台设置 消息查询 × √
  • 新老规格对应关系 2种RabbitMQ实例规格对比,新老规格的对应关系如所示。 表3 RabbitMQ实例新老规格对应关系 老规格 对应的新规格 规格类型 TPS参考值 规格类型 TPS参考值 4核 | 8GB * 3 3000 rabbitmq.4u8g.cluster * 3 6000 8核 | 16GB * 3 6000 rabbitmq.8u16g.cluster * 3 12000 16核 | 32GB * 3 24000 rabbitmq.16u32g.cluster * 3 48000 新老规格区别如下: 新规格性能更好,同等价格下性价比更优。 老规格使用的非独享资源,在高负载情况下容易出现资源抢占情况。新规格使用的独占资源,性能更优、稳定性更好。 新规格支持灵活的水平/垂直动态扩容,能更好的应对复杂的业务变化情况。 新规格支持更大规格的,最大可以支持rabbitmq.32u64g.cluster。 新规格除了原有的磁盘类型,还支持通用型SSD、极速型SSD等多种磁盘类型,客户选择更加灵活。
  • RabbitMQ实例的存储空间估算参考 在集群模式中,RabbitMQ需要对消息持久化写入到磁盘中,因此,您在创建RabbitMQ实例选择存储空间时,建议根据业务消息体积预估以及镜像队列副本数量选择合适的存储空间。镜像队列副本数最大为集群的代理数。 例如:业务消息体积预估100GB,则磁盘容量最少应为100GB*镜像队列副本数+预留磁盘大小100GB。 如果是单机实例,则是计算业务消息体积+预留磁盘大小即可。 当前RabbitMQ实例支持修改集群实例的代理个数,您可以根据业务情况,随时更改集群代理个数。单机实例暂不支持变更规格。
  • RabbitMQ实例规格 RabbitMQ实例兼容开源RabbitMQ 3.8.35/3.12.13和自研RabbitMQ AMQP-0-9-1,实例类型包括单机和集群,实例规格请参考表1和表2。 表1 RabbitMQ集群实例规格(3.x.x版本) 型号 代理数 存储空间范围(GB) TPS参考值 单个代理最大消费者数 单个代理建议队列数 单个代理最大连接数 rabbitmq.2u4g.cluster 3 300~90000 3000 4000 100 1000 5 500~150000 5000 4000 100 1000 7 700~210000 7000 4000 100 1000 rabbitmq.4u8g.cluster 3 300~90000 6000 8000 200 2000 5 500~150000 10000 8000 200 2000 7 700~210000 14000 8000 200 2000 rabbitmq.8u16g.cluster 3 300~90000 12000 16000 400 4000 5 500~150000 20000 16000 400 4000 7 700~210000 28000 16000 400 4000 rabbitmq.12u24g.cluster 3 300~90000 24000 24000 600 6000 5 500~150000 40000 24000 600 6000 7 700~210000 56000 24000 600 6000 rabbitmq.16u32g.cluster 3 300~90000 48000 32000 800 8000 5 500~150000 80000 32000 800 8000 7 700~210000 112000 32000 800 8000 rabbitmq.24u48g.cluster 3 300~90000 60000 40000 1000 10000 5 500~150000 100000 40000 1000 10000 7 700~210000 140000 40000 1000 10000 rabbitmq.32u64g.cluster 3 300~90000 72000 40000 1000 10000 5 500~150000 120000 40000 1000 10000 7 700~210000 168000 40000 1000 10000 上表中TPS(即生产+消费的TPS)是指以2K大小的消息为例的每秒处理消息条数,测试场景为不开启持久化的非镜像队列,实时生产实时消费,队列无积压。此数据仅供参考,生产使用需要以实际压测性能为准。 服务端的性能主要跟以下因素相关:队列数、消息堆积、连接数、channel、消费者数、镜像队列、优先级队列、消息持久化和exchange类型等,在选择实例规格时,请根据业务模型压测结果选择。 一条连接最多可以开启2047个channel。 单机版实例可用于测试场景,不建议用于生产业务,暂不提供单机版实例的产品规格。 RabbitMQ 3.x.x版本实例单个代理支持的最大连接数如上表所示,整个集群支持的最大连接数不超过30000。 表2 RabbitMQ集群实例规格(AMQP-0-9-1专业版) 型号 存储空间范围(GB) TPS参考值 实例最大连接数 实例最大队列数 amqp.p2.large.6 200~60000 3000 1000 500 amqp.p2.large.10 200~60000 5000 1000 500 amqp.p2.large.14 200~60000 7000 2000 1000 amqp.p2.large.20 200~60000 10000 2000 1000 amqp.p2.large.28 200~60000 14000 2000 1000 amqp.p2.large.40 200~60000 20000 3000 1500 amqp.p2.large.56 400~120000 28000 4000 2000 amqp.p2.large.80 400~120000 40000 6000 3000 amqp.p2.large.112 400~120000 56000 8000 4000 amqp.p2.large.144 600~180000 72000 10000 5000 amqp.p2.large.200 600~180000 100000 12000 6000 amqp.p2.large.240 800~240000 120000 16000 8000 amqp.p2.large.280 1200~360000 140000 16000 8000 上表中TPS,是指以4K大小的消息为例的每秒处理消息条数,测试场景为实时生产实时消费,队列无积压。此数据仅供参考,生产使用需要以实际压测性能为准。 服务端的性能主要跟以下因素相关:队列数、消息堆积、连接数、channel、消费者数和Exchange类型等,在选择实例规格时,请根据业务模型压测结果选择。 一条连接最多可以开启2000个channel。 单机版实例可用于测试场景,不建议用于生产业务,暂不提供单机版实例的产品规格。
  • 与Kafka、RocketMQ的差异 表1 功能差异 功能项 RocketMQ Kafka RabbitMQ 优先级队列 不支持 不支持 3.x.x版本:支持。建议优先级大小设置在0-10之间。 AMQP-0-9-1版本:支持。优先级大小设置在1-9之间。 延迟队列 支持 不支持 3.x.x版本:不支持。 AMQP-0-9-1版本:支持。 死信队列 支持 不支持 支持 消息重试 支持 不支持 3.x.x版本:不支持。 AMQP-0-9-1版本:支持。 消费模式 支持客户端主动拉取和服务端推送两种方式。 客户端主动拉取。 支持客户端主动拉取和服务端推送两种模式。 广播消费 支持 支持 支持 消息回溯 支持 支持。Kafka支持按照offset和timestamp两种维度进行消息回溯。 3.x.x版本:不支持。RabbitMQ中消息一旦被确认消费就会被标记删除。 AMQP-0-9-1版本:支持。 消息堆积 支持 支持。考虑吞吐因素,Kafka的堆积效率比RabbitMQ总体上要高。 支持 持久化 支持 支持 支持 消息追踪 支持 不支持 3.x.x版本:不支持。 AMQP-0-9-1版本:支持。 消息过滤 支持 支持 3.x.x版本:不支持,但可以自行封装。 AMQP-0-9-1版本:支持。 多租户 支持 支持 支持 多协议支持 兼容RocketMQ协议。 只支持Kafka自定义协议。 RabbitMQ基于AMQP协议实现。 跨语言支持 支持多语言的客户端。 采用Scala和Java编写,支持多种语言的客户端。 支持多种语言的客户端。 流量控制 RocketMQ 5.x支持基于实例规格的流量控制。 支持client、user和Topic级别,通过主动设置可将流控作用于生产者或消费者。 RabbitMQ的流控基于Credit-Based算法,是内部被动触发的保护机制,作用于生产者层面。 消息顺序性 单队列(queue)内有序。 支持单分区(partition)级别的顺序性。 单线程发送、单线程消费并且不采用延迟队列、优先级队列等一些高级功能时,才能实现消息有序。 安全机制 支持SSL认证。 支持SSL、SASL身份认证和读写权限控制。 3.x.x版本:支持SSL认证。 AMQP-0-9-1版本:支持ACL访问控制。 事务性消息 支持 支持 支持
  • 产品优势 华为云分布式消息服务RabbitMQ版完全兼容开源社区版本,旨在为您提供便捷高效的消息队列。业务无需改动即可快速迁移上云,为您节省维护和使用成本。 一键式部署,免去集群搭建烦恼 只需要在实例管理界面选好规格配置,提交订单,后台将自动创建部署完成一整套RabbitMQ实例。 兼容开源,业务零改动迁移上云 兼容社区版RabbitMQ的API,具备原生RabbitMQ的所有消息处理特性。 业务系统基于开源的RabbitMQ进行开发,只需加入少量认证安全配置,即可使用华为云分布式消息服务RabbitMQ版,做到无缝迁移。 RabbitMQ实例兼容开源社区RabbitMQ 3.8.35和3.12.13版本。 独占式体验 RabbitMQ实例采用物理隔离的方式部署,租户独占RabbitMQ实例,每个RabbitMQ之间互不影响。 高性能 单队列性能最高可达10万TPS(默认配置),增加队列可获得更高性能。 数据安全 独有的安全加固体系,提供业务操作云端审计,消息存储加密等有效安全措施。 在网络通信方面,除了提供SSL认证,还借助虚拟私有云(VPC)和安全组等加强网络访问控制。 无忧运维 华为云提供一整套完整的监控告警等运维服务,故障自动发现和告警,避免7*24小时人工值守。RabbitMQ实例自动上报相关监控指标,如分区数、主题数、堆积消息数等,并支持配置监控数据发送规则,您可以在第一时间通过短信、邮件等获得业务消息队列的运行使用和负载状态。 支持多语言客户端 RabbitMQ是一款基于AMQP协议的开源服务,用于在分布式系统中存储转发消息,服务器端用Erlang语言(支持高并发、分布式以及健壮的容错能力等特点)编写,支持多种语言的客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP和AJAX等。
  • 步骤三:连接实例生产消费消息 进入E CS 的“root”目录下,下载RabbitMQ-Tutorial.zip示例工程代码。 wget https://dms-demo.obs.cn-north-1.myhuaweicloud.com/RabbitMQ-Tutorial.zip “/root”为示例工程代码存放路径,请根据实际情况修改。 解压RabbitMQ-Tutorial.zip压缩包。 unzip RabbitMQ-Tutorial.zip 进入RabbitMQ-Tutorial目录,该目录下包含预编译好的jar文件。 cd RabbitMQ-Tutorial 运行生产消息示例。 java -cp .:rabbitmq-tutorial.jar Send ${host} ${port} ${user} ${password} 参数说明如下: host:从创建实例中获取的连接地址。 port:RabbitMQ实例的连接端口,输入5672。 user:创建实例时,设置的用户名。 password:创建实例时,设置的密码。 生产消息示例如下: [root@ecs-test RabbitMQ-Tutorial]# java -cp .:rabbitmq-tutorial.jar Send 192.168.xx.40 5672 test Zxxxxxxs [x] Sent 'Hello World!' [root@ecs-test RabbitMQ-Tutorial]# java -cp .:rabbitmq-tutorial.jar Send 192.168.xx.40 5672 test Zxxxxxxs [x] Sent 'Hello World!' 运行消费消息示例。 java -cp .:rabbitmq-tutorial.jar Recv ${host} ${port} ${user} ${password} 参数说明如下: host:从创建实例中获取的连接地址。 port:RabbitMQ实例的连接端口,输入5672。 user:创建实例时,设置的用户名。 password:创建实例时,设置的密码。 消费消息示例如下: [root@ecs-test RabbitMQ-Tutorial]# java -cp .:rabbitmq-tutorial.jar Recv 192.168.xx.40 5672 test Zxxxxxxs [*] Waiting for messages. To exit press CTRL+C [x] Received 'Hello World!' [x] Received 'Hello World!' 如需停止消费使用Ctrl+C命令退出。
  • 维度 Key Value rabbitmq_instance_id RabbitMQ实例 rabbitmq_node RabbitMQ实例节点 rabbitmq_queue RabbitMQ实例队列 rabbitmq_vhost RabbitMQ实例Vhost rabbitmq_vhost_exchange RabbitMQ实例Exchange rabbitmq_vhost_queue RabbitMQ实例Queue
  • 变更实例规格的影响 表3 变更实例规格的影响 变更配置类型 影响 代理数量 扩容代理数量过程中会重启RabbitMQ的负载均衡进程,导致节点主备倒换,造成秒级业务中断,客户端需要支持自动重连,建议在业务低峰时进行变更。 变更时长和新增代理数量有关,单个代理的变更时长一般在5~10分钟,总变更时长为(5~10分钟)*新增代理数量。 存储空间 扩容存储空间不会影响业务。 扩容存储空间有次数限制,只能扩容20次。 可用存储空间=实际存储空间-用于存储日志的存储空间-格式化磁盘的损耗。例如,实际扩容存储空间到700GB,用于存储日志的数据的存储空间为100GB,格式化磁盘损耗7GB,那么扩容后的可用存储空间为593GB。 预计总变更时长为5分钟内。 代理规格/实例规格 RabbitMQ 3.x.x版本单机实例在变更规格过程中,节点会重启,造成分钟级业务中断,客户端需要支持自动重连,建议在业务低峰时进行变更。 RabbitMQ 3.x.x版本没有配置镜像/仲裁队列的集群实例在变更规格过程中,节点会逐个重启,造成分钟级业务中断,客户端需要支持自动重连,建议在业务低峰时进行变更。 RabbitMQ 3.x.x版本配置了镜像/仲裁队列的集群实例在变更规格过程中,节点会逐个重启,造成秒级业务中断,客户端需要支持自动重连,建议在业务低峰时进行变更。 RabbitMQ 3.x.x版本集群实例在变更规格过程中,变更中的节点连接会切换至其余节点,导致其余节点存在过载风险(比如超过连接数、内存高水位等),建议您在实例规格范围内使用,具体实例规格请参考产品规格。 RabbitMQ AMQP-0-9-1版本单机实例和集群实例在变更规格过程中会有秒级连接闪断,客户端需要支持自动重连,建议在业务低峰时进行变更。 Exchange、Queue和消息需要配置持久化,否则节点重启后,消息可能丢失。设置持久化的方法,请参考配置RabbitMQ持久化。 代理采用滚动重启的方式进行实例变更,变更时长和代理数量有关,单个代理的变更时长一般在5~10分钟,总变更时长为(5~10分钟)*代理数量。 以下示例演示在Java客户端设置消息重试。 ConnectionFactory connectionFactory = new ConnectionFactory(); //设置服务地址 connectionFactory.setHost("localhost"); //设定端口 connectionFactory.setPort(5672); 自动重试: connectionFactory.setAutomaticRecoveryEnabled(true); connectionFactory.setNetworkRecoveryInterval(5); connectionFactory.setTopologyRecoveryEnabled(true);
  • RabbitMQ扩容/缩容会影响业务吗? 扩容/缩容RabbitMQ实例的影响如表1所示。 表1 变更实例规格的影响 变更配置类型 影响 代理数量 扩容代理数量过程中会重启RabbitMQ的负载均衡进程,导致节点主备倒换,造成秒级业务中断,客户端需要支持自动重连,建议在业务低峰时进行变更。 变更时长和新增代理数量有关,单个代理的变更时长一般在5~10分钟,总变更时长为(5~10分钟)*新增代理数量。 存储空间 扩容存储空间不会影响业务。 扩容存储空间有次数限制,只能扩容20次。 可用存储空间=实际存储空间-用于存储日志的存储空间-格式化磁盘的损耗。例如,实际扩容存储空间到700GB,用于存储日志的数据的存储空间为100GB,格式化磁盘损耗7GB,那么扩容后的可用存储空间为593GB。 预计总变更时长为5分钟内。 代理规格/实例规格 RabbitMQ 3.x.x版本单机实例在变更规格过程中,节点会重启,造成分钟级业务中断,客户端需要支持自动重连,建议在业务低峰时进行变更。 RabbitMQ 3.x.x版本没有配置镜像/仲裁队列的集群实例在变更规格过程中,节点会逐个重启,造成分钟级业务中断,客户端需要支持自动重连,建议在业务低峰时进行变更。 RabbitMQ 3.x.x版本配置了镜像/仲裁队列的集群实例在变更规格过程中,节点会逐个重启,造成秒级业务中断,客户端需要支持自动重连,建议在业务低峰时进行变更。 RabbitMQ 3.x.x版本集群实例在变更规格过程中,变更中的节点连接会切换至其余节点,导致其余节点存在过载风险(比如超过连接数、内存高水位等),建议您在实例规格范围内使用,具体实例规格请参考产品规格。 RabbitMQ AMQP-0-9-1版本单机实例和集群实例在变更规格过程中会有秒级连接闪断,客户端需要支持自动重连,建议在业务低峰时进行变更。 Exchange、Queue和消息需要配置持久化,否则节点重启后,消息可能丢失。设置持久化的方法,请参考配置RabbitMQ持久化。 代理采用滚动重启的方式进行实例变更,变更时长和代理数量有关,单个代理的变更时长一般在5~10分钟,总变更时长为(5~10分钟)*代理数量。 以下示例演示在Java客户端设置消息重试。 ConnectionFactory connectionFactory = new ConnectionFactory(); //设置服务地址 connectionFactory.setHost("localhost"); //设定端口 connectionFactory.setPort(5672); 自动重试: connectionFactory.setAutomaticRecoveryEnabled(true); connectionFactory.setNetworkRecoveryInterval(5); connectionFactory.setTopologyRecoveryEnabled(true); 父主题: 实例问题