华为云用户手册

  • 在费用中心续费 登录管理控制台。 单击“控制台”页面上方“费用与成本”,在下拉菜单中选择“续费管理”,进入“续费管理”页面。 自定义查询条件。 可在“手动续费项”、“自动续费项”、“到期转按需项”、“到期不续费项”页签查询全部待续费资源,对资源进行手动续费的操作。 图2 续费管理 所有需手动续费的资源都可归置到“手动续费项”页签,具体操作请参见如何恢复为手动续费。 手动续费资源。 单个续费:在资源页面找到需要续费的资源,单击操作列的“续费”。 图3 单个续费 批量续费:在资源页面勾选需要续费的资源,单击列表左上角的“批量续费”。 图4 批量续费 选择云服务器的续费时长,判断是否勾选“统一到期日”,将云服务器到期时间统一到各个月的某一天(详细介绍请参见统一包年/包月资源的到期日)。确认配置费用后单击“去支付”。 图5 续费确认 进入支付页面,选择支付方式,确认付款,支付订单后即可完成续费。
  • 核对资源用量是否与实际相符 假设用户在2023/04/08 10:09:06开通了设备接入S1单元,单元数量2,并在2023/04/08 12:09:06时刻将其删除。 设备接入流水账单 按需计费设备接入标准版实例按小时计费,不足1小时按1小时计算,每小时0分结算一次费用,您可以在流水账单中核对每一个计费周期的信息是否和实际相符,具体如表 设备接入流水账单所示。 表1 设备接入流水账单 产品类型 设备接入 IoTDA 产品 设备接入标准实例 计费模式 按需 消费时间 2023/04/08 10:09:06 ~ 2023/04/08 12:09:06时段计费系统将生成2笔流水账单,对应每一个计费周期,分别如下: 2023/04/08 10:00:00 ~ 2023/04/08 11:00:00 2023/04/08 11:00:00 ~ 2023/04/08 12:00:00 官网价 官网价=使用量*单价 本例中,共2个计费周期,以1.7元/S1单元/小时为例,那么官网价=1.7 * 2 * 2 = 6.8元。 优惠金额 用户使用云服务享受折扣优惠如商务折扣、伙伴授予折扣以及促销优惠等减免的金额。基于官网价的优惠金额。 抹零金额 华为云产品 定价精度为小数点后8位(单位:元),因此在计费过程中会产生小数点后8位的资源使用费用。而在实际扣费时,仅扣除到小数点后2位,小数点后第3位到第8位部分金额会被舍弃,这种舍弃部分的金额称作抹零金额。 应付金额 应付金额=官网价-优惠金额-抹零金额 设备接入明细账单 明细账单可以通过多维度展示客户账单的详细信息。一般通过设置统计维度为“按使用量”、统计周期为“按账期”来统计资源在某个月份的总开销,建议您核对表 设备接入明细账单所示的信息是否和实际相符。 表2 设备接入明细账单 产品类型 设备接入 IoTDA 产品 设备接入标准实例 计费模式 按需 资源名称/ID 设备接入实例的名称和ID 例如:iotda-test-instance,4cdeb1cd-7071-4890-9ce4-e6c2299e960e 规格 设备接入标准实例|S1低频单元 使用量类型 按需计费设备接入实例的使用量类型为“时长” 单价 按需计费模式为简单 定价 (使用量*单价)时提供单价信息,其他的定价(如EIP公网带宽的阶梯定价)等不提供单价。 按需计费设备接入实例属于简单定价,您可以在设备接入价格详情中查询单价。 单价单位 在设备接入价格详情中查询到的单价单位:元/小时 使用量 按产品单价单位显示使用量,设备接入的单价单位为元/小时,因此使用量以小时为单位。本例中,2023/04/08 10:09:06 ~ 2023/04/08 12:09:06时段总计使用量为2小时。 使用量单位 小时 官网价 官网价=使用量*单价*容量 本例中,使用量为2小时,单价可在设备接入价格详情中查询,以1.7元/个/小时为例,单元数为2,那么官网价=1.7 * 2 * 2 = 6.8元。 优惠金额 用户使用云服务享受折扣优惠如商务折扣、伙伴授予折扣以及促销优惠等减免的金额。基于官网价的优惠金额。 应付金额 用户使用云服务享受折扣优惠后需要支付的费用金额。
  • 在续费管理页面开通自动续费 登录管理控制台。 单击“控制台”页面上方“费用与成本”,在下拉菜单中选择“续费管理”。进入“续费管理”页面。 自定义查询条件。 可在“自动续费项”页签查询已经开通自动续费的资源。 可对“手动续费项”、“到期转按需项”、“到期不续费项”页签的资源开通自动续费。 图2 续费管理 为包年/包月资源开通自动续费。 单个资源开通自动续费:选择需要开通自动续费的弹性云服务器,单击操作列“开通自动续费”。 图3 单个资源开通自动续费 批量资源开通自动续费:选择需要开通自动续费的设备接入实例,单击列表左上角的“开通自动续费”。 图4 多个资源开通自动续费 选择续费时长,并根据需要设置自动续费次数,单击“开通”。 在“续费管理”页面开通的自动续费,自动续费周期以实际选择的续费时长以及自动续费次数为准。例如:您选择了续费时长3个月,不限次数,即在每次到期前自动续费3个月。 图5 开通自动续费
  • 修订记录 发布日期 修订记录 2024-07-29 第二十三次正式发布。 修改: 优化接入桌面有怎样的网络要求?表格中用户体验列的描述内容。 2024-07-19 第二十二次正式发布。 新增: 云桌面 内应用中心无法打开已经安装的软件如何处理? 2024-06-07 第二十一次正式发布。 新增:使用自定义安全组时,如何配置安全组规则? 2024-01-02 第二十次正式发布。 新增: Windows云桌面如何开启RDP? 2023-11-23 第十九次正式发布。 新增: 云桌面如何开启IPv6? 2023-09-11 第十八次正式发布。 新增: 云桌面最多支持创建多少个私有镜像? 如何开启/关闭云桌面的应急模式? 2023-08-23 第十七次正式发布。 新增: 购买云桌面后如何为企业项目迁入/迁出资源? 云桌面安装火绒杀毒管理员桌面转镜像失败如何处理? 2022-12-08 第十六次正式发布。 新增: 终端绑定问题 2022-11-11 第十五次正式发布。 修改: 优化云桌面支持使用私有镜像购买桌面吗?中镜像描述。 2022-11-03 第十四次正式发布。 新增: 云桌面如何进行备份恢复? 登录时提示受策略限制无法登录该如何处理? 2022-09-23 第十三次正式发布。 新增: 云桌面中可以登录淘宝网吗? 云桌面中可以访问手机淘宝吗? 修改: 修改云桌面支持哪种操作系统?中UOS操作系统版本。 2022-09-19 第十二次正式发布。 新增: 导入策略提示名称重复如何处理? 重建系统盘后Windows桌面的数据盘消失了怎么办? 2022-09-06 第十一次正式发布。 新增: 如何使终端用户可使用网络打印机? 云桌面管理控制台中提示“服务被锁定,请取消服务后重新开户”或“购买桌面、创建用户、创建策略、开通互联网”的按钮已置灰,无法使用怎么办? 云桌面中无法使用网络打印机怎么办? 2022-08-10 第十次正式发布。 修改: 优化云桌面屏幕无法适配怎么办?中PC显示器分辨率调节描述。 2022-08-08 第九次正式发布。 新增: 无法通过多因素验证怎么办? 2022-07-15 第八次正式发布。 新增: 如何通过其他云服务页面开通互联网? 2022-07-04 第七次正式发布。 新增: 云桌面无法访问互联网怎么办? 2022-07-01 第六次正式发布。 修改: 如何使终端用户可使用本地打印机?优化策略配置。 如何配置云桌面访问公网?优化参考链接。 如何配置云桌面访问企业内网?优化参考链接。 如何控制云桌面与本地存储设备之间的文件复制?优化操作描述。 云桌面无法连接外网怎么办?优化关闭代理描述。 云桌面中无法使用本地打印机怎么办?优化处理步骤。 无法在云桌面与本地存储设备之间复制文件怎么办?增加用户操作描述。 2022-04-29 第五次正式发布。 修改: 忘记帐户密码怎么办?优化操作描述。 2022-04-12 第四次正式发布。 新增: 如何启用AD服务器的LDAPS服务? 如何导出已启用LDAPS的AD服务器的根证书? 2022-03-30 第三次正式发布。 修改: 云桌面是如何计费的?优化套餐类型描述。 如下章节中增加Windows操作系统描述。 云桌面支持哪种操作系统? 云桌面是否支持个性化设置? 哪些软件禁止卸载? 哪些文件禁止删除? 哪些命令禁止执行? 2022-02-28 第二次正式发布。 新增: 如何扩容UOS磁盘容量至新增磁盘分区? 如何扩容UOS磁盘容量至已有磁盘分区? 2022-01-05 第一次正式发布。
  • 接入桌面有怎样的网络要求? 接入桌面的网络要求如表1所示。为保障良好的用户体验,网络QoS建议至少满足良好等级,建议企业用户通过专线接入。 表1 接入网络QoS要求 等级 网络QoS要求 用户体验 优秀 丢包率小于等于0.01%。 往返时延小于等于30毫秒。 网络抖动小于等于10毫秒。 基本办公流畅(Word、Excel、记事本等)。 音视频体验流畅。 外设支持好,U盘等存储设备使用、操作流畅。 良好 丢包率小于等于0.1%。 往返时延小于等于50毫秒。 网络抖动小于等于10毫秒。 基本办公流畅(Word、Excel、记事本等)。 音视频体验可用(偶现卡顿)。 外设支持一般,存在识别缓慢,U盘等存储设备操作略微卡顿,U盘复制速度较慢。 基本 丢包率小于等于0.3%。 往返时延小于等于100毫秒。 网络抖动小于等于40毫秒。 基本办公可用(Word、Excel、记事本等)。 音视频体验卡顿(QQ音乐、暴风影音等)。 外设识别困难,操作卡顿,基本不可用(U盘、摄像头等)。 父主题: 管理员常见问题
  • 2024年04月 序号 功能 功能描述 阶段 相关文档 1 Flexus云服务器X实例支持Windows Server市场镜像 Windows Server操作系统是来自云商店的非自营镜像,该服务由第三方提供。为方便您选用,在公共镜像中提供入口。 商用 Flexus X实例镜像概述 2 Flexus云服务器X实例新增功能 支持对接任务中心 支持云服务器组 支持定时删除 商用 查看失败信息 管理Flexus云服务器X实例云服务器组 购买Flexus云服务器X实例 3 Flexus云服务器X实例支持包年/包月计费模式 包年/包月是一种预付费模式,即先付费再使用,按照订单的购买周期进行结算。 商用 计费说明
  • 2023年9月 序号 功能名称 功能描述 阶段 相关文档 1 Flexus应用服务器 L实例 支持重装操作系统 云耀云服务器L实例支持重装操作系统功能,使用系统镜像创建的云耀云服务器L实例操作系统运行异常时,您可以使用重装系统功能恢复操作系统。 公测 重装操作系统 2 Flexus应用服务器L实例支持数据盘、云备份扩容 当已有数据盘、云备份容量不足时,您可以扩大该数据盘、云备份的容量。 公测 扩展数据盘容量 扩展云备份容量 3 Flexus应用服务器L实例支持增加数据盘 云耀云服务器L实例没有数据盘时,支持新增加一块数据盘。 公测 增加数据盘 4 Flexus应用服务器L实例支持自动续费功能 云耀云服务器L实例支持自动续费功能。自动续费可以减少手动续费的管理成本,避免因忘记手动续费而导致云耀云服务器L实例或云耀负载均衡被自动删除。 公测 自动续费 5 Flexus应用服务器L实例控制台体验优化 资源卡片样式、图标优化;资源卡片列表支持分页。 公测 控制台介绍
  • 2024年05月 序号 功能 功能描述 阶段 相关文档 1 Flexus应用服务器L实例新增功能 支持批量续费、退订。 支持批量重装操作系统。 公测 为Flexus L实例续费 退订Flexus L实例 2 Flexus应用服务器L实例新增多种登录方式 Linux系统云主机支持CloudShell等多种登录方式。 Windows系统云主机支持RDP文件等多种登录方式。 公测 通过CloudShell登录Linux系统Flexus L实例 通过RDP文件登录Windows系统Flexus L实例
  • 2024年06月 序号 功能 功能描述 阶段 相关文档 1 Flexus云服务器X实例支持性能模式 Flexus云服务器X实例支持开启性能模式,开启性能模式后,您需要多支付一些费用,从而可以获得极致稳定的性能保障。 商用 使用Flexus X实例性能模式 2 Flexus应用服务器L实例新增镜像 Flexus应用服务器L实例新增Node.js 运行环境、在线学习系统Moodle、网站内容管理系统Joomla、项目管理系统Redmine、知识创作与内容变现系统Ghost、可道云企业网盘Kodbox、CRM系统EspoCRM 7款应用镜像。 公测 镜像概述
  • 哪些数据会占用文档数据库实例空间 以下内容占用文档数据库实例空间: 您申请的磁盘空间会有必要的文件系统开销,这些开销包括索引节点和保留块,以及数据库运行必需的空间。 除备份数据以外的用户正常的数据。 文档数据库实例正常运行所需的数据,比如系统数据库、数据库回滚日志、索引等。 文档数据库服务产生的日志输出文件,这些文件会保证文档数据库实例正常稳定地运行。比如oplog文件,默认占磁盘空间的10%,oplog是轮转日志,所以oplog的留存时间主要由oplog产生速率决定,如需修改,可以通过控制台界面修改参数值oplogSizePercent,具体步骤请参见修改DDS实例参数。 父主题: 资源及磁盘管理
  • 修订记录 发布日期 更新特性 2024-06-30 第二十次正式发布,包含以下内容: 新增什么是逻辑会话(Logical Sessions) 2024-05-30 第十九次正式发布,包含以下内容: 新增DDS的监控指标采集粒度是多少 2024-03-30 第十八次正式发布,包含以下内容: 新增WiredTiger引擎脏数据的缓存过高告警恢复手段 2023-10-30 第十七次正式发布,包含以下内容: 新增DDS是否支持$round函数 2023-03-30 第十六次正式发布,包含以下内容: 新增如何管理均衡器Balancer 2022-06-30 第十五次正式发布,包含以下内容: 新增资源冻结/释放/删除/退订 2021-12-30 第十四次正式发布,包含以下内容: 新增如何找回DDS丢失的备份数据。 2021-10-30 第十三次正式发布,包含以下内容: 新增DDS支持修改时区吗。 新增如何使用MapReduce命令。 2021-05-30 第十二次正式发布,包含以下内容: 新增什么是DDS实例的只读状态? 新增应用程序是否需要支持自动重连数据库。 2021-03-30 第十一次正式发布,包含以下内容: 新增DDS是否支持TTL索引清理过期数据。 2020-11-30 第十次正式发布,包含以下内容: 新增DDS实例连接失败怎么办。 2020-08-30 第九次正式发布,包含以下内容: 新增分片内存超过90%产生告警,如何消减。 2020-07-30 第八次正式发布,包含以下内容: 新增副本集主备节点之间的数据同步方式是什么。 2020-05-30 第七次正式发布,包含以下内容: 新增DDS是否支持多可用区部署。 2020-04-30 第六次正式发布,包含以下内容: 新增删除和退订实例的区别是什么。 2019-11-11 第五次正式发布,包含以下内容: 新增集群和副本集在什么情况会触发主备切换。 新增实例的连接数满导致实例连接失败,如何处理?。 新增DDS集群持续写入数据后查询报错怎么处理。 修改用户平时需要关注实例的哪些性能指标。 新增DDS实例删除后,手动备份是否继续收费。 2019-10-18 第四次正式发布,包含以下内容: 新增如何查询及限制连接数。 新增如何安装Robo 3T工具。 2018-11-02 第三次正式发布,包含以下内容: 修改如何安装MongoDB客户端。 2018-05-04 第一次正式发布。
  • 维度 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
  • 约束与限制 2020年7月1日之前购买的RabbitMQ实例,不支持在控制台开启插件,如果需要开启,请提交工单联系技术人员在后台开启插件。 2020年11月14日之前购买的RabbitMQ实例,不支持在控制台开启rabbitmq_consistent_hash_exchange插件,如果需要开启,请提交工单联系技术人员在后台开启插件。 开启插件过程中,不会重启实例。 rabbitmq_shovel和rabbitmq_federation插件在特定场景下才支持开启,具体如表2所示。 表2 支持开启插件的场景 实例 rabbitmq_shovel rabbitmq_federation 未开启SSL的单机实例 支持 支持 已开启SSL的单机实例 不支持 不支持 未开启SSL的集群实例 不支持 支持 已开启SSL的集群实例 不支持 不支持
  • 创建RabbitMQ Vhost(RabbitMQ WebUI) 登录RabbitMQ WebUI。 在顶部导航栏选择“Admin”,进入Admin页面。 在右侧导航栏选择“Virtual Hosts”,进入Virtual Hosts页面。 图4 Virtual Hosts 在“Add a new virtual host”区域,输入Vhost名称,单击“Add virtual host”。 图5 创建Vhost(WebUI) 创建成功后,在“All virtual hosts”区域,显示创建成功的Vhost。 图6 Vhost列表(WebUI)
  • 配置RabbitMQ镜像队列 登录RabbitMQ实例的Web UI。 在菜单栏,选择“Admin”。 图1 选择Admin菜单 (可选)选择右侧导航栏“Virtual Hosts”,然后输入“Name”,单击“Add virtual host”,创建Vhost。 如果您需要设置指定Vhost,请执行本步骤;如果不需要,请直接执行4。 图2 创建Vhost 选择右侧导航栏“Policies”,为Vhost设置策略。 图3 设置Vhost策略 表1 策略参数说明 参数 说明 Virtual Host 设置策略所应用的Vhost。如果为指定的Vhost设置,请在“Virtual Host”选择3创建的Vhost;如果没有,则默认为“/”。 Name 策略的名称,用户自定义。 Pattern Queue的匹配模式(正则表达式)。 Apply to 策略所适用的目标。 Priority 策略的优先级,数字越大,优先级越高。 Definition 镜像定义,包括三个部分ha-sync-mode、ha-mode、ha-params。 ha-sync-mode: 表示镜像队列中消息的同步方式,有效取值范围为:automatic和manual。 automatic:表示自动向master同步数据。 manual:表示手动向master同步数据。 ha-mode: 指明镜像队列的模式,有效取值范围为:all、exactly和nodes。 all:表示在集群所有的节点上进行镜像。 exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定。 nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定。 ha-params: ha-mode模式需要用到的参数。 单击“Add policy”。 策略添加成功后如下图所示。 图4 Vhost策略
  • 设置预取值 以下示例演示在Java客户端为单个消费者设置预取值为10。 ConnectionFactory factory = new ConnectionFactory(); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); //设置预取值为10。 channel.basicQos(10, false); QueueingConsumer consumer = new QueueingConsumer(channel); channel.basicConsume("my_queue", false, consumer); 在Java客户端中,global的默认值为false,因此以上示例可以简单地写为channel.basicQos(10)。 global取值的含义如下: false:分别作用于通道上的每个新消费者。 true:在通道上的所有消费者之间所共享。
  • 预取值设置建议 如果您只有一个或很少几个消费者在处理消息,建议一次预取多条消息,尽量让客户端保持忙碌。如果您的处理时间和网络状态稳定,则只需将总往返时间除以每条消息在客户端的处理时间即可获得估计的预取值。 在消费者多且处理时间短的情况下,建议使用较低的预取值。过低的预取值会使消费者闲置,因为消费者在处理完消息后需要等待下一批的消息到达。过高的值可能会使单个消费者忙碌,其他消费者处于空闲状态。 在消费者多且处理时间很长的情况下,建议您将预取值设置为1,以便消息在所有消费者间均匀分布。
  • LVS的心跳超时时间 RabbitMQ集群实例使用LVS进行负载均衡,如图1所示,单节点实例不涉及LVS。 图1 集群实例的负载均衡 LVS对客户端连接设置了心跳超时时间,默认为90秒。如果客户端在90秒内没有向LVS发送心跳(AMQP心跳帧或消息收发),LVS会主动断开与客户端的连接,此时客户端需要重新连接。 如果存在消息收发时间间隔大于90秒的场景,请在客户端开启心跳并设置小于90秒的心跳超时时间。
  • 什么是心跳 RabbitMQ实例提供了心跳功能,以确保应用程序层及时发现中断的连接和完全无响应的对端。心跳还可以防止某些网络设备在一段时间内由于没有活动而中断TCP连接。开启心跳的方法为在连接上指定心跳超时时间。 心跳超时时间定义了对等TCP连接在多长时间后被服务端和客户端视为关闭。服务端和客户端会对配置的心跳超时时间进行协商,客户端必须配置该值来发送心跳。RabbitMQ官方团队维护的3个客户端(Java、.NET、Erlang语言)的心跳超时时间协商逻辑如下: 服务端和客户端设置的心跳超时时间都不为0时,两者间较小的值生效。 服务端和客户端任意一端设置的心跳超时时间为0,另一端不为0时,非0的值生效。 服务端和客户端的心跳超时时间都设置为0时,表示禁用心跳。 配置心跳超时时间后,RabbitMQ服务端和客户端都会向对方发送AMQP心跳帧作为心跳,发送的时间间隔为心跳超时时间的一半。客户端在两次错过心跳后,会被认为是不可达的,TCP连接将被关闭。当客户端检测到服务端由于心跳而无法访问时,需要重新连接。更多关于心跳的说明,请参考Detecting Dead TCP Connections with Heartbeats and TCP Keepalives。 一些客户端(如C语言客户端)没有发送心跳的逻辑,即使配置了心跳超时时间,开启了心跳,仍然无法发送心跳。此时需要额外启动一个线程,编写发送心跳的逻辑。
  • 迁移后检查 通过以下方法,确认原实例是否消费完成: 在RabbitMQ WebUI页面查看,如图7所示。 Overview视图中,可消费消息数(Ready)以及未确认的消息数(Unacked)都为0时,说明消费完成。 图7 RabbitMQ WebUI 调用API查看。 curl -s -u username:password -XGET http://ip:port/api/overview 参数说明: username:原实例登录RabbitMQ WebUI的账号 password:原实例登录RabbitMQ WebUI的密码 ip:原实例登录RabbitMQ WebUI的IP地址 port:原实例登录RabbitMQ WebUI的端口号 回显信息中“messages_ready”和“messages_unacknowledged”都为0时,说明消费完成。 图8 回显信息
  • 实施方案(双读模式迁移实例) 将原RabbitMQ实例的元数据迁移到目标RabbitMQ实例。 图1 迁移元数据 迁移步骤如下: 登录原RabbitMQ的WebUI页面,在“Overview”页签中,单击“Download broker definitions”,导出元数据。 图2 导出元数据 登录目标RabbitMQ的WebUI页面,在“Overview”页签中,单击“选择文件”,选择1.a中导出的元数据,单击“Upload broker definitions”,上传元数据。 图3 导入元数据 为目标RabbitMQ实例添加新的消费者,准备消费目标实例的消息。 图4 添加新消费者 为目标RabbitMQ实例添加新的生产者,下线原RabbitMQ实例的生产者,旧的消费者继续消费原RabbitMQ实例中的消息。 图5 迁移生产者 旧的消费者消费完原RabbitMQ实例的全部消息后,下线旧的消费者和原RabbitMQ实例。 图6 下线旧的消费者和原RabbitMQ实例
  • 配置仲裁队列的长度 通过配置Policy或者队列属性的方式可以限制仲裁队列的长度和在内存中保存的长度。 x-max-length:仲裁队列最大消息数。如果超过则丢弃消息,或者发送到死信交换器。 x-max-length-bytes:仲裁队列最大总消息大小(字节数)。如果超过则丢弃消息,或者发送到死信交换器。 x-max-in-memory-length:限制仲裁队列的内存中最大消息数量。 x-max-in-memory-bytes:限制仲裁队列的内存中的最大总消息大小(字节数)。
  • 仲裁队列与镜像队列的差异 仲裁队列是RabbitMQ 3.8版本引入的队列类型,它与镜像队列拥有类似的功能,为RabbitMQ提供高可用的队列。镜像队列有一些设计上的缺陷,这也是RabbitMQ提供仲裁队列的原因。 镜像队列主要的缺陷在于消息同步的性能低。 镜像队列包含一个主队列和多个从队列,当生产者向主队列发送一条消息,主队列会将消息同步给从队列,所有的从队列都保存消息后,主队列才会向生产者发送确认。 RabbitMQ使用集群部署时,如果其中一个节点故障下线,待它消除故障重新上线后,它保存的所有从队列的数据都会丢失。此时运维人员需要选择是否同步主队列的数据到从队列中,如果不同步数据,会增加消息丢失的风险。如果同步数据,同步时队列是阻塞的,无法对其进行操作。当队列中存在大量堆积消息时,同步会导致队列几分钟、几小时或者更长时间不可用。
  • 删除Vhost(RabbitMQ WebUI) 登录RabbitMQ WebUI。 在顶部导航栏选择“Admin”,进入Admin页面。 在右侧导航栏选择“Virtual Hosts”,进入Virtual Hosts页面。 图1 Virtual Hosts页面 单击待删除的Vhost名称,进入Vhost详情页。 图2 待删除的Vhost 在“Delete this vhost”区域,单击“Delete this virtual host”,弹出确认删除对话框。 图3 删除Vhost 单击“确定”,完成Vhost的删除。
  • 消费者确认 消费者确认是指服务端通过确认消息是否成功被消费者接收,来判断是否删除队列中的此消息。 消费者确认对数据可靠性十分重要,接收重要消息的消费应用程序在未处理完消息前不应确认消息,以便消费者有足够的时间处理消息,无需担心消息处理过程中由于消费者进程异常(如工作程序崩溃、重启等)导致消息丢失。 消费者确认在客户端上配置,通过配置basicConsume方法启用确认。在channel中启用消费者确认适用于大多数场景。 以下示例演示在Java客户端配置消费者确认(使用Channel#basicAck设置basic.ack为肯定): // this example assumes an existing channel instance boolean autoAck = false; channel.basicConsume(queueName, autoAck, "a-consumer-tag", new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { long deliveryTag = envelope.getDeliveryTag(); // positively acknowledge a single delivery, the message will // be discarded channel.basicAck(deliveryTag, false); } }); 未确认的消息缓存在内存中,如果未确认的消息过多,会导致内存使用率过高,此时可以在客户端配置预取值来限制消费者预取的消息数量,具体方法请参见配置RabbitMQ消息预取值。
  • 生产者确认 生产者确认,即服务端在收到来自生产者的消息时进行确认。 以下示例演示在Java客户端配置生产者确认: try { channel.confirmSelect() ; //将信道置为publisher confirm模式 //之后正常发送消息 channel.basicPublish("exchange", "routingKey" , null , "publisher confirm test" .getBytes()); if (!channel.waitForConfirms()) { System.out.println( "send message failed " ) ; // do something else.... } } catch (InterruptedException e) { e.printStackTrace() ; } 调用channel .waitForConfirms方法之后,会等待服务端确认,这是一种同步等待的方式,会对性能产生影响。如果生产者要满足at least once,就必须使用同步等待方式。
  • 前提条件 已购买RabbitMQ实例,并记录创建时输入的用户名和密码,实例未开启SSL。 在实例详情中查看并记录“内网连接地址/公网连接地址”。 客户端所在服务器和RabbitMQ实例之间网络已互通,具体网络要求参见连接RabbitMQ网络要求。 客户端所在服务器已安装Java Development Kit 1.8.111或以上版本,并配置JAVA_HOME与PATH环境变量,环境变量配置方法如下: 使用执行用户在用户家目录下修改“.bash_profile”,添加如下行。其中“/opt/java/jdk1.8.0_151”为JDK的安装路径,请根据实际情况修改。 export JAVA_HOME=/opt/java/jdk1.8.0_151 export PATH=$JAVA_HOME/bin:$PATH 执行source .bash_profile命令使修改生效。 RabbitMQ实例中已创建Vhost、Exchange和Queue,且配置Exchange和Queue的绑定。
  • 命令行模式连接实例 登录客户端所在服务器。 下载RabbitMQ-Tutorial.zip示例工程代码。 wget https://dms-demo.obs.cn-north-1.myhuaweicloud.com/RabbitMQ-Tutorial.zip 解压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命令退出。
  • 示例代码(Java) 连接实例并生产消息示例代码: VHOST_NAME:消息要发送的Queue所在的Vhost名称。 QUEUE_NAME:消息要发送的Queue名称。 Hello World!:要发送的消息,根据实际需要修改。 ConnectionFactory factory = new ConnectionFactory(); factory.setHost(host); factory.setPort(port); factory.setVirtualHost("VHOST_NAME"); factory.setUsername(user); factory.setPassword(password); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); channel.queueDeclare(QUEUE_NAME, false, false, false, null); String message = "Hello World!"; channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8")); System.out.println(" [x] Sent '" + message + "'"); channel.close(); connection.close(); 连接实例并消费消息示例代码: VHOST_NAME:要消费消息的Queue所在的Vhost名称。 QUEUE_NAME:要消费消息的Queue名称。 ConnectionFactory factory = new ConnectionFactory(); factory.setHost(host); factory.setPort(port); factory.setVirtualHost("VHOST_NAME"); factory.setUsername(user); factory.setPassword(password); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); channel.queueDeclare(QUEUE_NAME, false, false, false, null); System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); Consumer consumer = new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String message = new String(body, "UTF-8"); System.out.println(" [x] Received '" + message + "'"); } }; channel.basicConsume(QUEUE_NAME, true, consumer);
  • RabbitMQ业务使用流程 分布式消息服务RabbitMQ版完全兼容开源RabbitMQ,为您提供即开即用、消息特性丰富、灵活路由、高可用、监控和告警等特性,广泛应用于秒杀、流控、系统解耦等场景。 使用RabbitMQ实例生产消费消息的流程如下图所示。 图1 RabbitMQ业务使用流程 创建用户并授权使用DMS for RabbitMQ 创建 IAM 用户,并授予DMS for RabbitMQ的权限,以达到用户之间权限的隔离。 购买RabbitMQ实例 RabbitMQ实例采用物理隔离的方式部署,租户独占RabbitMQ实例。 创建Vhost 生产者和消费者连接RabbitMQ实例时,需要指定一个Vhost。 创建Exchange 生产者向RabbitMQ实例发送消息时,不会直接将消息发送到Queue,而是先将消息发送到Exchange中,Exchange根据路由键将消息发送到对应的Queue。 创建Queue Queue用于存储消息,每个消息都会被发送到一个或多个Queue中。 绑定Queue Exchange收到消息后,根据路由键将消息发送到绑定的Queue。 连接实例 客户端使用内网/公网连接RabbitMQ实例,并生产消费消息。
共100000条