云服务器内容精选

  • 计费模式概述 分布式消息服务RocketMQ版提供包年/包月和按需计费两种计费模式,以满足不同场景下的用户需求。 包年/包月:一种预付费模式,即先付费再使用,按照订单的购买周期进行结算。购买周期越长,享受的折扣越大。一般适用于业务需求量长期稳定的成熟业务。 按需计费:一种后付费模式,即先使用再付费,按照RocketMQ实例实际使用时长计费,秒级计费,按小时结算。按需计费模式允许您根据实际业务需求灵活地调整资源使用,无需提前预置资源,从而降低预置过多或不足的风险。一般适用于电商抢购等业务需求量瞬间大幅波动的场景。 表1列出了两种计费模式的区别。 表1 计费模式 计费模式 包年/包月 按需计费 付费方式 预付费 按照订单的购买周期结算。 后付费 按照RocketMQ实例实际使用时长计费。 计费周期 按订单的购买周期计费。 秒级计费,按小时结算。 适用计费项 实例费用、存储空间费用 实例费用、存储空间费用 变更计费模式 支持变更为按需计费模式。 但包年/包月资费模式到期后,按需的资费模式才会生效。 支持变更为包年/包月计费模式。 变更规格 支持变更实例规格。 支持变更实例规格。 适用场景 适用于可预估资源使用周期的场景。对于长期使用者,推荐该方式,价格比按需计费模式更优惠。 适用于资源需求波动的场景,可以随时开通,随时删除。 父主题: 计费模式
  • 到期后影响 图3描述了包年/包月RocketMQ实例各个阶段的状态。购买后,在计费周期内RocketMQ实例正常运行,此阶段为有效期;RocketMQ实例到期而未续费时,将陆续进入宽限期和保留期。 图3 包年/包月RocketMQ实例生命周期 到期预警 包年/包月RocketMQ实例在到期前第7天内,系统将向用户推送到期预警消息。预警消息将通过邮件、短信和站内信的方式通知到华为云账号的创建者。 到期后影响 资源到期未续费,进入宽限期。 如果您的包年/包月RocketMQ实例到期未续费,RocketMQ实例会进入宽限期,RocketMQ实例状态变为“已过期”。宽限期内您可以正常访问RocketMQ实例,但以下操作将受到限制: 变更实例规格。 资源宽限期到期未续费,进入保留期。 如果您在宽限期内仍未续费包年/包月RocketMQ实例,RocketMQ实例会进入保留期,RocketMQ实例状态变为“已冻结”,您将无法对处于保留期的包年/包月RocketMQ实例执行任何操作。 资源保留期到期未续费,释放且不可恢复。 如果包年/包月RocketMQ实例在保留期到期前仍未续费,那么RocketMQ实例将被释放,数据无法恢复。 华为云根据客户等级定义了不同客户的宽限期和保留期时长。 关于续费的详细介绍请参见续费概述。
  • 适用场景 包年/包月计费模式需要用户预先支付一定时长的费用,适用于长期、稳定的业务需求。以下是一些适用于包年/包月计费模式的业务场景: 稳定业务需求:对于长期运行且资源需求相对稳定的业务,如企业官网、在线商城、博客等,包年/包月计费模式能提供较高的成本效益。 长期项目:对于周期较长的项目,如科研项目、大型活动策划等,包年/包月计费模式可以确保在整个项目周期内资源的稳定使用。 业务高峰预测:如果能预测到业务高峰期,如电商促销季、节假日等,可提前购买包年/包月资源以应对高峰期的需求,避免资源紧张。 数据安全要求高:对于对数据安全性要求较高的业务,包年/包月计费模式可确保资源的持续使用,降低因资源欠费而导致的数据安全风险。
  • 计费示例 假设您于2023/03/08 15:50:04在“华北-北京四”区域购买了一个包年/包月4.8.0版本的RocketMQ实例(规格:rocketmq.4u8g.cluster.small*1,总存储空间:超高I/O 300GB),计费资源包括实例费用(代理规格和代理数量),以及存储空间费用(超高I/O 300GB)。购买时长为一个月,并在到期前手动续费1个月,则: 第一个计费周期为:2023/03/08 15:50:04 ~ 2023/04/08 23:59:59 第二个计费周期为:2023/04/08 23:59:59 ~ 2023/05/08 23:59:59 您需要为每个计费周期预先付费,各项RocketMQ资源单独计费,计费公式如表2所示。 表2 计费公式 资源类型 计费公式 资源单价 实例费用 实例规格单价 * 购买时长 请参见分布式消息服务RocketMQ版价格详情中的“实例价格”。 存储空间费用 存储空间单价 * 购买时长 请参见分布式消息服务RocketMQ版价格详情中的“存储价格”。 图2给出了上述示例配置的费用计算过程。 图中价格仅供参考,实际计算请以分布式消息服务RocketMQ版价格详情中的价格为准。 图2 包年/包月RocketMQ实例费用计算示例(华北-北京四区域)
  • 适用计费项 分布式消息服务RocketMQ版对您选择的RocketMQ实例和RocketMQ的磁盘存储空间收费。以下计费项支持包年/包月。 表1 适用计费项 计费项 说明 实例费用 4.8.0版本的实例费用包括代理规格和代理数量。 5.x基础版的实例费用包括TPS和部署类型。 存储空间费用 总存储空间(单个代理的存储空间*代理数量)的费用。随包年/包月RocketMQ实例创建的存储空间,其计费模式也为包年/包月。 假设您计划购买一个RocketMQ 4.8.0版本的实例,其存储空间为300GB。在购买RocketMQ实例页面底部,您将看到所需费用的明细,如图1所示。 图1 配置费用示例 配置费用将包括以下部分: 实例费用:根据所选配置(包括代理规格和代理数量)计算的费用。 存储空间费用:磁盘类型和总磁盘存储空间(单个代理的存储空间*代理数量)的费用。
  • 变更配置后对计费的影响 当前包年/包月RocketMQ实例资源的规格不满足您的业务需要时,您可以在RocketMQ实例控制台发起变更规格操作,变更时系统将按照如下规则为您计算变更费用: 资源升配:新配置价格高于老配置价格,此时您需要支付新老配置的差价。 资源降配:新配置价格低于老配置价格,此时华为云会将新老配置的差价退给您。 这里以资源升配且无任何优惠的场景为例,假设您于2023/04/08在“华北-北京四”区域购买了一个包年/包月RocketMQ实例(rrocketmq.4u8g.cluster*1),购买时长为1个月,计划在2023/04/18变更规格为rocketmq.8u16g.cluster*1。旧配置价格为6300 元/月,新配置价格为12150 元/月。计算公式如下: 升配费用=新配置价格*剩余周期-旧配置价格*剩余周期 公式中的剩余周期为每个自然月的剩余天数/对应自然月的最大天数。本示例中,剩余周期=12(4月份剩余天数)/ 30(4月份最大天数)+ 8(5月份剩余天数)/ 31(5月份最大天数)=0.6581,代入公式可得升配费用=12150*0.6581-6300*0.6581=3849.89(元) 更多信息请参见变更资源规格费用说明。
  • 包年/包月资源 对于包年/包月计费模式的资源,例如包年/包月的RocketMQ实例,用户在购买时会一次性付费,服务将在到期后自动停止使用。 如果在计费周期内不再使用包年/包月资源,您可以执行退订操作,系统将根据资源是否属于五天无理由退订、是否使用代金券和折扣券等条件返还一定金额到您的账户。详细的退订规则请参见云服务退订规则概览。 如果您已开启“自动续费”功能,为避免继续产生费用,请在自动续费扣款日(默认为到期前7日)之前关闭自动续费。
  • 变更配置后对计费的影响 如果您在购买按需计费实例后变更了实例规格,会产生一个新订单并开始按新规格的价格计费,旧订单自动失效。 如果您在一个小时内变更了实例规格,将会产生多条计费信息。每条计费信息的开始时间和结束时间对应不同规格在该小时内的生效时间。 例如,您在9:00:00购买了一个按需计费实例,实例规格为rocketmq.4u8g.cluster*1,并在9:30:00升配为rocketmq.8u16g.cluster*1,那么在9:00:00 ~ 10:00:00间会产生两条计费信息。 第一条对应9:00:00 ~ 9:30:00,实例规格按照rocketmq.4u8g.cluster*1计费。 第二条对应9:30:00 ~ 10:00:00,实例规格按照rocketmq.8u16g.cluster*1计费。
  • 适用计费项 分布式消息服务RocketMQ版对您选择的RocketMQ实例和RocketMQ的磁盘存储空间收费。以下计费项支持按需计费。 表1 适用计费项 计费项 说明 实例费用 4.8.0版本的实例费用包括代理规格和代理数量。 5.x基础版的实例费用包括TPS和部署类型。 存储空间费用 总存储空间(单个代理的存储空间*代理数量)的费用。 假设您计划购买一个4.8.0版本的RocketMQ实例,其存储空间为300GB。在购买RocketMQ实例页面底部,您将看到所需费用的明细,如图1所示。 图1 配置费用示例 配置费用将包括以下部分: 实例费用:根据所选配置(包括代理规格和代理数量)计算的费用。 存储空间费用:磁盘类型和总磁盘存储空间(单个代理的存储空间*代理数量)的费用。
  • 计费示例 假设您于2023/04/18 9:59:30在“华北-北京四”区域购买了一个按需计费4.8.0版本的RocketMQ实例(规格:rocketmq.4u8g.cluster.small*1,总存储空间:高I/O 300GB),计费资源包括实例费用(代理规格和代理数量),以及存储空间费用(高I/O 300GB),然后在2023/04/18 10:45:46将其删除,则: 第一个计费周期为9:00:00 ~ 10:00:00,在9:59:30 ~ 10:00:00间产生费用,该计费周期内的计费时长为30秒。 第二个计费周期为10:00:00 ~ 11:00:00,在10:00:00 ~ 10:45:46间产生费用,该计费周期内的计费时长为2746秒。 您需要为每个计费周期付费,各项RocketMQ资源单独计费,计费公式如表2所示。产品价格详情中标出了资源的每小时价格,您需要将每小时价格除以3600,得到每秒价格。 表2 计费公式 资源类型 计费公式 资源单价 实例费用 实例规格单价 * 购买时长 请参见分布式消息服务RocketMQ版价格详情中的“实例价格”。 存储空间费用 存储空间单价 * 购买时长 请参见分布式消息服务RocketMQ版价格详情中的“存储价格”。 图2给出了上述示例配置的费用计算过程。 图中价格仅供参考,实际计算请以分布式消息服务RocketMQ版价格详情中的价格为准。 图2 按需计费RocketMQ实例费用计算示例(华北-北京四区域)
  • 计费周期 按需计费RocketMQ实例按秒计费,每一个小时整点结算一次费用(以UTC+8时间为准),结算完毕后进入新的计费周期。计费的起点以RocketMQ实例创建成功的时间点为准,终点以实例删除时间为准。 例如,您在8:45:30购买了一个按需计费的RocketMQ实例,然后在8:55:00将其删除,则计费周期为8:00:00 ~ 9:00:00,在8:45:30 ~ 8:55:30间产生费用,该计费周期内的计费时长为600秒。
  • 准备环境 执行以下命令,检查是否已安装Go。 go version 返回如下回显时,说明Go已经安装。 go version go1.16.5 linux/amd64 如果未安装Go,请下载并安装。 在“go.mod”中增加以下代码,添加依赖。 module rocketmq-example-go go 1.13 require ( github.com/apache/rocketmq-clients/golang/v5 )
  • 准备环境 执行以下命令,检查是否已安装Go。 go version 返回如下回显时,说明Go已经安装。 go version go1.16.5 linux/amd64 如果未安装Go,请下载并安装。 在“go.mod”中增加以下代码,添加依赖。 module rocketmq-example-go go 1.13 require ( github.com/apache/rocketmq-client-go/v2 v2.1.1 )
  • 订阅顺序消息 只需要在订阅普通消息的代码基础上增加consumer.WithConsumerOrder(true),参考如下示例代码(以下加粗内容需要替换为实例自有信息,请根据实际情况替换)。 package main import ( "context" "fmt" "os" "time" "github.com/apache/rocketmq-client-go/v2" "github.com/apache/rocketmq-client-go/v2/consumer" "github.com/apache/rocketmq-client-go/v2/primitive" ) func main() { c, _ := rocketmq.NewPushConsumer( consumer.WithGroupName("testGroup"), consumer.WithNsResolver(primitive.NewPassthroughResolver([]string{"192.168.0.1:8100"})), consumer.WithConsumerModel(consumer.Clustering), consumer.WithConsumeFromWhere(consumer.ConsumeFromFirstOffset), consumer.WithConsumerOrder(true), ) err := c.Subscribe("test", consumer.MessageSelector{}, func(ctx context.Context, msgs ...*primitive.MessageExt) (consumer.ConsumeResult, error) { orderlyCtx, _ := primitive.GetOrderlyCtx(ctx) fmt.Printf("orderly context: %v\n", orderlyCtx) fmt.Printf("subscribe orderly callback: %v \n", msgs) return consumer.ConsumeSuccess, nil }) if err != nil { fmt.Println(err.Error()) } // Note: start after subscribe err = c.Start() if err != nil { fmt.Println(err.Error()) os.Exit(-1) } time.Sleep(time.Hour) err = c.Shutdown() if err != nil { fmt.Printf("Shutdown Consumer error: %s", err.Error()) } } 示例代码中的参数说明如下,请参考收集连接信息获取参数值。 testGroup:表示消费组名称。 192.168.0.1:8100:表示实例连接地址和端口。 test:表示Topic名称。
  • 消费者增加用户认证信息 无论是普通消息、顺序消息、定时消息,还是事务消息,都参考如下代码。以下加粗内容需要替换为实例自有信息,请根据实际情况替换。 package main import ( "context" "fmt" "os" "time" "github.com/apache/rocketmq-client-go/v2" "github.com/apache/rocketmq-client-go/v2/consumer" "github.com/apache/rocketmq-client-go/v2/primitive" ) func main() { c, err := rocketmq.NewPushConsumer( consumer.WithGroupName("testGroup"), consumer.WithNsResolver(primitive.NewPassthroughResolver([]string{"192.168.0.1:8100"})), consumer.WithCredentials(primitive.Credentials{ AccessKey: os.Getenv("ROCKETMQ_AK"), //用户名和密钥直接硬编码到代码中或者明文存储都存在很大的风险,建议在配置文件或者环境变量中密文存放,使用时解密。 SecretKey: os.Getenv("ROCKETMQ_SK"), }), ) if err != nil { fmt.Println("init consumer error: " + err.Error()) os.Exit(0) } err = c.Subscribe("test", consumer.MessageSelector{}, func(ctx context.Context, msgs ...*primitive.MessageExt) (consumer.ConsumeResult, error) { fmt.Printf("subscribe callback: %v \n", msgs) return consumer.ConsumeSuccess, nil }) if err != nil { fmt.Println(err.Error()) } // Note: start after subscribe err = c.Start() if err != nil { fmt.Println(err.Error()) os.Exit(-1) } time.Sleep(time.Hour) err = c.Shutdown() if err != nil { fmt.Printf("Shutdown Consumer error: %s", err.Error()) } } 示例代码中的参数说明如下,请参考收集连接信息获取参数值。 testGroup:表示消费组名称。 192.168.0.1:8100:表示实例连接地址和端口。 AccessKey:表示用户名。创建用户的步骤,请参见创建用户。 SecretKey:表示用户的密钥。 test:表示Topic名称。