云服务器内容精选

  • 查询消息轨迹 在待查询消息所在行,单击“消息轨迹”。 查看消息的轨迹,确定是否生产/消费成功。 消息轨迹的参数说明如表1所示。 表1 消息轨迹的参数说明 参数 参数说明 生产者状态 生产者状态如下: 发送成功:消息发送成功,服务端已经成功存储消息。 提交成功:允许消费者消费此事务消息。 回滚:事务消息将被丢弃,不允许消费者消费此事务消息。 未知,待确认:事务消息状态暂时无法确定,等待固定时间后,服务端向生产者进行消息回查。 生产耗时 生产者发送消息的耗时。 生产地址 生产者的IP地址和端口号。 消费者状态 消费者状态如下: 消费成功 消费超时 消费异常 消费返回NULL 消费失败 消费时间 消费消息的时间。 消费耗时 消费者消费消息的耗时。 消费地址 消费者的IP地址和端口号。
  • 操作场景 本章节指导您通过查询消息功能查看具体的消息内容,以及确定消息是否生产/消费成功。 分布式消息服务RocketMQ版提供三种消息查询的方法:按Topic查询、按Message ID查询和按Message Key查询。 按Topic查询:查询某时间段内指定Topic下所有的消息。此方法属于范围查询,查询到的消息可能比较多。 按Message ID查询:查询指定Message ID的消息。此方法属于精确查找,可以快速查询到某一条消息。 按Message Key查询:查询指定Message Key的消息。此方法属于精确查找,可以快速查询到某一条消息。
  • 消息清理机制 无论消息是否被消费,RocketMQ的消息默认保留时间为48小时,最长保留时间为720小时。RocketMQ消息存储在CommitLog文件中,CommitLog文件大小为1GB,当一个CommitLog文件写满后,会生成一个新的CommitLog文件。RocketMQ删除消息是删除CommitLog文件,而不是删除一条消息。CommitLog文件为顺序写入,当最后写入的一条消息过期时,表示CommitLog文件过期。满足如下任意一个条件,CommitLog文件将会被清理: 每天凌晨4点会清理过期的文件,部分老实例由于未设置时区,清理时间为每天中午12点。 当磁盘使用率达到70%时,会立刻清理过期的文件。 当磁盘使用率达到85%时,会从最早创建的文件开始清理,不管文件是否已过期,直到磁盘空间充足。
  • 命令行模式连接实例 下载“rocketmq-tutorial”示例软件包。 wget https://dms-demos.obs.cn-north-1.myhuaweicloud.com/rocketmq-tutorial.zip 解压“rocketmq-tutorial”。 unzip rocketmq-tutorial.zip (可选)如果RocketMQ实例开启了ACL访问控制,执行mqadmin命令时,需要鉴权。 切换到解压后的软件包目录下,在“conf/tools.yml”文件中,增加如下内容。 accessKey:******* secretKey:******* accessKey和secretKey表示在控制台“用户管理”页面,创建的用户名和密钥。 进入“rocketmq-tutorial/bin”目录。 cd rocketmq-tutorial/bin 运行生产普通消息示例。 JAVA_OPT=-Dtls.enable=true sh mqadmin sendMessage -n "${连接地址}" -t ${Topic名称} -p "hello rocketmq" 参数说明如下: 连接地址:表示RocketMQ实例的“连接地址”(内网访问)/“公网连接地址”(公网访问)。 Topic名称:RocketMQ实例下创建的Topic名称。 示例如下,其中“100.xxx.xxx.89:8200;100.xxx.xxx.144:8200”为RocketMQ实例的元数据公网连接地址,“topic-test”为Topic名称。 JAVA_OPT=-Dtls.enable=true sh mqadmin sendMessage -n "100.xxx.xxx.89:8200;100.xxx.xxx.144:8200" -t topic-test -p "hello rocketmq" 使用Ctrl+C命令退出。 运行消费普通消息示例。 JAVA_OPT=-Dtls.enable=true sh mqadmin consumeMessage -n "${连接地址}" -t ${Topic名称} 参数说明如下: 连接地址:表示RocketMQ实例的“连接地址”(内网访问)/“公网连接地址”(公网访问)。 Topic名称:RocketMQ实例下创建的Topic名称。 示例如下,其中“100.xxx.xxx.89:8200;100.xxx.xxx.144:8200”为RocketMQ实例的元数据公网连接地址,“topic-test”为Topic名称。 JAVA_OPT=-Dtls.enable=true sh mqadmin consumeMessage -n "100.xxx.xxx.89:8200;100.xxx.xxx.144:8200" -t topic-test 如需停止消费使用Ctrl+C命令退出。 运行生产带消息轨迹的消息示例。 JAVA_OPT=-Dtls.enable=true sh mqadmin sendMessage -n "${连接地址}" -t ${Topic名称} -p "hello rocketmq" -m true 参数说明如下: 连接地址:表示RocketMQ实例的“连接地址”(内网访问)/“公网连接地址”(公网访问)。 Topic名称:RocketMQ实例下创建的Topic名称。 示例如下,其中“100.xxx.xxx.89:8200;100.xxx.xxx.144:8200”为RocketMQ实例的元数据公网连接地址,“topic-test”为Topic名称。 JAVA_OPT=-Dtls.enable=true sh mqadmin sendMessage -n "100.xxx.xxx.89:8200;100.xxx.xxx.144:8200" -t topic-test -p "hello rocketmq" -m true 使用Ctrl+C命令退出。 运行消费消息示例,并发送消息轨迹。 JAVA_OPT=-Dtls.enable=true sh mqadmin consumeMessage -n "${连接地址}" -t ${Topic名称} -m true 参数说明如下: 连接地址:表示RocketMQ实例的“连接地址”(内网访问)/“公网连接地址”(公网访问)。 Topic名称:RocketMQ实例下创建的Topic名称。 示例如下,其中“100.xxx.xxx.89:8200;100.xxx.xxx.144:8200”为RocketMQ实例的元数据公网连接地址,“topic-test”为Topic名称。 JAVA_OPT=-Dtls.enable=true sh mqadmin consumeMessage -n "100.xxx.xxx.89:8200;100.xxx.xxx.144:8200" -t topic-test -m true 使用Ctrl+C命令退出。
  • 操作场景 本章节指导您迁移其他厂商或自建RocketMQ实例的元数据到云上RocketMQ实例。 主要提供以下两种迁移方法,请根据实际情况选择: 方法一:通过mqadmin命令导出源实例的元数据,然后在云上RocketMQ实例中创建迁移任务。 方法二:导出源实例的Topic和消费组列表,然后通过脚本将Topic和消费组列表导入到云上RocketMQ实例中(适用于不支持通过mqadmin命令导出元数据的场景)。
  • 操作场景 RocketMQ实例4.8.0版本创建成功后,您可以根据业务需要,进行扩容,RocketMQ实例支持的变更配置如表1所示。 表1 变更配置列表(RocketMQ实例4.8.0版本) 变更配置类型 是否支持扩容 是否支持缩容 代理个数 √ × 存储空间 √ × 代理规格 √ × RocketMQ实例5.x版本创建成功后,您可以根据业务需要,进行扩容,RocketMQ实例支持的变更配置如表2所示。 表2 变更配置列表(RocketMQ实例5.x版本) 变更配置类型 是否支持扩容 是否支持缩容 存储空间(单机实例) √ × 实例规格(单机实例) × × 存储空间(集群实例) √ × 实例规格(集群实例) √ ×
  • CTS支持的DMS for RocketMQ操作 表1 云审计服务支持的分布式消息服务RocketMQ版操作列表 操作名称 资源类型 事件名称 创建Topic成功 reliability RocketMQ_Topic_CreationSuccess 创建Topic失败 reliability RocketMQ_Topic_CreationFailure 修改Topic成功 reliability RocketMQ_Topic_ModifySuccess 修改Topic失败 reliability RocketMQ_Topic_ModifyFailure 删除Topic成功 reliability RocketMQ_Topic_DeletionSuccess 删除Topic失败 reliability RocketMQ_Topic_DeletionFailure 批量删除Topic成功 reliability RocketMQ_Batch_Topic_DeletionSuccess 批量删除Topic失败 reliability RocketMQ_Batch_Topic_DeletionFailure 批量修改Topic成功 reliability RocketMQ_Batch_Topic_ModifySuccess 批量修改Topic失败 reliability RocketMQ_Batch_Topic_ModifyFailure 创建消费组成功 reliability RocketMQ_Create_GroupSuccess 创建消费组失败 reliability RocketMQ_Create_GroupFailure 编辑消费组成功 reliability RocketMQ_Group_ModifySuccess 编辑消费组失败 reliability RocketMQ_Group_ModifyFailure 删除消费组成功 reliability RocketMQ_Group_DeletionSuccess 删除消费组失败 reliability RocketMQ_Group_DeletionFailure 批量删除消费组成功 reliability RocketMQ_Batch_Group_DeletionSuccess 批量删除消费组失败 reliability RocketMQ_Batch_Group_DeletionFailure 批量编辑消费组成功 reliability RocketMQ_Batch_Group_ModifySuccess 批量编辑消费组失败 reliability RocketMQ_Batch_Group_ModifyFailure 重启实例节点成功 reliability restartInstanceBrokerSuccess 重启实例节点失败 reliability restartInstanceBrokerFailure 删除后台任务成功 reliability deleteDMSBackendJobSuccess 删除后台任务失败 reliability deleteDMSBackendJobFailure 创建DMS实例订单成功 reliability createDMSInstanceOrderSuccess 创建DMS实例订单失败 reliability createDMSInstanceOrderFailure 提交修改DMS实例订单请求成功 reliability modifyDMSInstanceOrderSuccess 提交修改DMS实例订单请求失败 reliability modifyDMSInstanceOrderFailure 提交扩容实例请求成功 reliability extendDMSInstanceSuccess 提交扩容实例请求失败 reliability extendDMSInstanceFailure 删除创建失败的DMS实例成功 reliability deleteDMSCreateFailureInstancesSuccess 删除创建失败的DMS实例失败 reliability deleteDMSCreateFailureInstancesFailure 提交批量删除DMS实例请求成功 reliability batchDeleteDMSInstanceSuccess 提交批量删除DMS实例请求失败 reliability batchDeleteDMSInstanceFailure 提交修改DMS实例信息请求成功 reliability modifyDMSInstanceInfoSuccess 提交修改DMS实例信息请求失败 reliability modifyDMSInstanceInfoFailure 批量删除DMS实例任务 reliability batchDeleteDMSInstanceTask 解冻DMS实例任务执行成功 reliability unfreezeDMSInstanceTaskSuccess 解冻DMS实例任务执行失败 reliability unfreezeDMSInstanceTaskFailure 冻结DMS实例任务执行成功 reliability freezeDMSInstanceTaskSuccess 冻结DMS实例任务执行失败 reliability freezeDMSInstanceTaskFailure 删除DMS实例任务执行成功 reliability deleteDMSInstanceTaskSuccess 删除DMS实例任务执行失败 reliability deleteDMSInstanceTaskFailure 创建DMS实例任务执行成功 reliability createDMSInstanceTaskSuccess 创建DMS实例任务执行失败 reliability createDMSInstanceTaskFailure 扩容DMS实例任务执行成功 reliability extendDMSInstanceTaskSuccess 扩容DMS实例任务执行失败 reliability extendDMSInstanceTaskFailure 修改DMS实例信息任务执行成功 reliability modifyDMSInstanceInfoTaskSuccess 修改DMS实例信息任务执行失败 reliability modifyDMSInstanceInfoTaskFailure
  • 命令行模式连接实例 下载“rocketmq-tutorial”示例软件包。 wget https://dms-demos.obs.cn-north-1.myhuaweicloud.com/rocketmq-tutorial.zip 解压“rocketmq-tutorial”。 unzip rocketmq-tutorial.zip (可选)如果RocketMQ实例开启了ACL访问控制,执行mqadmin命令时,需要鉴权。 切换到解压后的软件包目录下,在“conf/tools.yml”文件中,增加如下内容。 accessKey:******* secretKey:******* accessKey和secretKey表示在控制台“用户管理”页面,创建的用户名和密钥。 进入“rocketmq-tutorial/bin”目录。 cd rocketmq-tutorial/bin 运行生产普通消息示例。 sh mqadmin sendMessage -n "${连接地址}" -t ${Topic名称} -p "hello rocketmq" 参数说明如下: 连接地址:表示RocketMQ实例的“连接地址”(内网访问)/“公网连接地址”(公网访问)。 Topic名称:RocketMQ实例下创建的Topic名称。 示例如下,其中“100.xxx.xxx.89:8200;100.xxx.xxx.144:8200”为RocketMQ实例的元数据公网连接地址,“topic-test”为Topic名称。 sh mqadmin sendMessage -n "100.xxx.xxx.89:8200;100.xxx.xxx.144:8200" -t topic-test -p "hello rocketmq" 使用Ctrl+C命令退出。 运行消费普通消息示例。 sh mqadmin consumeMessage -n "${连接地址}" -t ${Topic名称} 参数说明如下: 连接地址:表示RocketMQ实例的“连接地址”(内网访问)/“公网连接地址”(公网访问)。 Topic名称:RocketMQ实例下创建的Topic名称。 示例如下,其中“100.xxx.xxx.89:8200;100.xxx.xxx.144:8200”为RocketMQ实例的元数据公网连接地址,“topic-test”为Topic名称。 sh mqadmin consumeMessage -n "100.xxx.xxx.89:8200;100.xxx.xxx.144:8200" -t topic-test 如需停止消费使用Ctrl+C命令退出。 运行生产带消息轨迹的消息示例。 sh mqadmin sendMessage -n "${连接地址}" -t ${Topic名称} -p "hello rocketmq" -m true 参数说明如下: 连接地址:表示RocketMQ实例的“连接地址”(内网访问)/“公网连接地址”(公网访问)。 Topic名称:RocketMQ实例下创建的Topic名称。 示例如下,其中“100.xxx.xxx.89:8200;100.xxx.xxx.144:8200”为RocketMQ实例的元数据公网连接地址,“topic-test”为Topic名称。 sh mqadmin sendMessage -n "100.xxx.xxx.89:8200;100.xxx.xxx.144:8200" -t topic-test -p "hello rocketmq" -m true 使用Ctrl+C命令退出。 运行消费消息示例,并发送消息轨迹。 sh mqadmin consumeMessage -n "${连接地址}" -t ${Topic名称} -m true 参数说明如下: 连接地址:表示RocketMQ实例的“连接地址”(内网访问)/“公网连接地址”(公网访问)。 Topic名称:RocketMQ实例下创建的Topic名称。 示例如下,其中“100.xxx.xxx.89:8200;100.xxx.xxx.144:8200”为RocketMQ实例的元数据公网连接地址,“topic-test”为Topic名称。 sh mqadmin consumeMessage -n "100.xxx.xxx.89:8200;100.xxx.xxx.144:8200" -t topic-test -m true 使用Ctrl+C命令退出。
  • 操作步骤 进入购买RocketMQ实例页面。 选择“计费模式”、“区域”、“项目”和“可用区”。 设置实例信息。 实例名称:实例的名称,用于区分不同的实例。 企业项目:根据实际业务情况选择企业项目。 规格选择模式:选择“默认”或者“规格测算”。 选择“默认”,且“版本”为“4.8.0”时,您需要根据实际情况选择RocketMQ实例支持的规格、代理个数和代理存储空间。 部署架构:仅支持“集群”,保持默认值即可。 CPU架构:仅支持“x86计算”,保持默认值即可。 代理规格:根据实际业务情况选择实例规格。 代理数量:RocketMQ实例的代理个数。 代理存储空间:选择RocketMQ实例的磁盘类型和单个代理的储存空间。 磁盘类型支持高I/O、超高I/O、通用型SSD和极速型SSD,如何选择磁盘类型请参考磁盘类型及性能介绍。 图1 默认的规格类型(RocketMQ实例4.8.0版本) 选择“默认”,且“版本”为“5.x”时,您需要根据实际情况选择RocketMQ实例支持的规格和代理存储空间。 实例类型:仅支持“基础版”,保持默认值即可。 部署架构:支持“单机”和“集群”。 单机:表示部署一个RocketMQ代理。单机仅用于测试环境,不可用于生产环境。 集群:表示部署多个RocketMQ代理。 CPU架构:仅支持“x86计算”,保持默认值即可。 实例规格:根据实际业务情况选择实例规格。 存储空间:选择RocketMQ实例的磁盘类型和储存空间总量。 磁盘类型支持高I/O、超高I/O、通用型SSD和极速型SSD,如何选择磁盘类型请参考磁盘类型及性能介绍。 图2 默认的规格类型(RocketMQ实例5.x版本) 选择规格测算时,系统根据您输入的参数(Topic个数、生产tps峰值、消费tps峰值、平均消息大小和日生产消息数),为您计算出不同规格所需的代理个数和代理存储空间,您根据实际情况选择。 图3 规格测算 设置实例网络环境信息。 在“虚拟私有云”下拉列表,选择已经创建好的虚拟私有云和子网。 虚拟私有云可以为您的RocketMQ实例构建隔离的、能自主配置和管理的虚拟网络环境。 虚拟私有云和子网在RocketMQ实例创建完成后,不支持修改。 在“安全组”下拉列表,可以选择已经创建好的安全组。 安全组是一组对RocketMQ实例访问规则的集合。 设置SSL。 客户端连接RocketMQ实例时,是否开启SSL认证。开启SSL,则数据加密传输,安全性更高。 创建实例后,SSL开关不支持修改,请慎重选择。如果创建后需要修改,需要重新创建实例。 RocketMQ实例5.x基础版不支持此功能。 设置ACL访问控制。 开启ACL访问控制后,为不同用户赋予不同的Topic和消费组权限,以达到用户之间的权限隔离。 设置实例购买时长。 当选择了“包年/包月”付费模式时,页面才显示“购买时长”参数,您需要根据业务需要选择。 单击“更多配置”,设置更多相关信息。 设置“公网访问”。 “公网访问”默认为关闭状态,您可以选择是否开启。开启公网访问后,还需要为每个节点设置对应的IPv4弹性IP地址。 设置标签。 标签用于标识云资源,当您拥有相同类型的许多云资源时,可以使用标签按各种维度(例如用途、所有者或环境)对云资源进行分类。 如您的组织已经设定分布式消息服务RocketMQ版的相关标签策略,则需按照标签策略规则为RocketMQ实例添加标签。标签如果不符合标签策略的规则,则可能会导致RocketMQ实例创建失败,请联系组织管理员了解标签策略详情。 如果您已经预定义了标签,在“标签键”和“标签值”中选择已经定义的标签键值对。另外,您可以单击右侧的“查看预定义标签”,跳转到标签管理服务页面,查看已经预定义的标签,或者创建新的标签。 您也可以直接在“标签键”和“标签值”中设置标签。 每个RocketMQ实例最多支持设置20个不同标签,标签的命名规格,请参考配置RocketMQ实例标签章节。 设置实例的描述信息。 填写完上述信息后,单击“立即购买”,进入规格确认页面。 确认实例信息无误且阅读并同意《华为云用户协议》后,如果“计费模式”选择“包年/包月”,单击“去支付”。根据界面提示信息,支付费用。如果“计费模式”选择“按需付费”,单击“提交”。 在实例列表页面查看实例是否创建成功。 创建实例大约需要3到15分钟,此时实例的“状态”为“创建中”。 当实例的“状态”变为“运行中”时,说明实例创建成功。 当实例的“状态”变为“创建失败”,请参考删除RocketMQ实例,删除创建失败的实例,然后重新创建。如果重新创建仍然失败,请联系客服。
  • 前提条件 在购买RocketMQ实例前,您需要提前准备相关依赖资源,包括虚拟私有云(Virtual Private Cloud,以下简称VPC)、子网和安全组,并配置安全组策略。每个RocketMQ实例都部署在某个VPC中,并绑定具体的子网和安全组,通过这样的方式为RocketMQ提供一个隔离的、用户自主配置和管理的虚拟网络环境以及安全保护策略,提升实例的安全性。 RocketMQ实例所需资源的具体要求和创建指导如表1所示。 表1 RocketMQ实例依赖资源 准备资源 要求 创建指导 VPC和子网 RocketMQ实例可以使用当前账号下已创建的VPC和子网,也可以使用新创建的VPC和子网,还可以使用共享VPC和子网,请根据实际需要进行配置。 共享VPC是基于资源访问管理(Resource Access Manager,简称RAM)服务的机制,VPC的所有者可以将VPC内的子网共享给一个或者多个账号使用。通过共享VPC功能,可以简化网络配置,帮助您统一配置和运维多个账号下的资源,有助于提升资源的管控效率,降低运维成本。有关VPC子网共享的更多信息,请参见共享VPC。 在创建VPC和子网时应注意如下要求: 创建的VPC与使用的RocketMQ实例应在相同的区域。 创建VPC和子网时,配置参数建议使用默认配置。 创建VPC和子网的操作指导请参考创建虚拟私有云和子网,若需要在已有VPC上创建和使用新的子网,请参考为虚拟私有云创建新的子网。 安全组 不同的RocketMQ实例可以重复使用相同的安全组,也可以使用不同的安全组,请根据实际需要进行配置。 使用RocketMQ实例必须添加表2或表3所示安全组规则,其他规则请根据实际需要添加。 说明: 创建安全组后,系统默认添加入方向“允许安全组内的弹性云服务器彼此通信”规则和出方向“放通全部流量”规则,此时使用内网通过同一个VPC访问RocketMQ实例,无需添加表2或表3的规则。 创建安全组的操作指导请参考创建安全组,为安全组添加规则的操作指导请参考添加安全组规则。 弹性IP地址 在创建弹性IP地址时,应注意如下要求: 创建的弹性IP地址与RocketMQ实例在相同的区域。 RocketMQ控制台无法识别开启IPv6转换功能的弹性IP地址。 创建弹性IP地址的操作指导请参考申请弹性公网IP。 表2 安全组规则(RocketMQ实例4.8.0版本) 方向 协议 端口 源地址 说明 入方向 TCP 8100 0.0.0.0/0 通过内网访问元数据节点的端口 入方向 TCP 8200 0.0.0.0/0 公网访问元数据节点的端口 入方向 TCP 10100-10199 0.0.0.0/0 访问业务节点的端口 表3 安全组规则(RocketMQ实例5.x版本) 方向 协议 端口 源地址 说明 入方向 TCP 8100 0.0.0.0/0 使用TCP协议,通过内网访问实例的端口 入方向 TCP 8200 0.0.0.0/0 使用TCP协议,通过公网访问实例的端口 入方向 TCP 10100-10199 0.0.0.0/0 使用TCP协议,访问业务节点的端口 入方向 TCP 8080 0.0.0.0/0 使用gRPC协议,通过内网访问实例的端口 入方向 TCP 8081 0.0.0.0/0 使用gRPC协议,通过公网访问实例的端口
  • 操作场景 分布式消息服务RocketMQ版控制台支持重启实例的某个Broker节点,或者所有Broker节点。 主节点重启过程中,客户端的生产和消费请求会被拒绝,持续时间不超过30s,建议在业务量少时重启节点。重启备节点,不会影响业务的使用。 怎么判断哪个是主节点? 主节点为“Broker ID”显示“0”的节点。 图1 重启节点 仅在RocketMQ实例4.8.0版本支持重启节点,5.x版本不支持。
  • 操作步骤(Go) 在客户端开启消息轨迹的方法如下: 执行以下命令,检查是否已安装Go。 go version 返回如下回显时,说明Go已经安装。 [root@ecs-test sarama]# go version 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.0 ) 生产者开启消息轨迹(以下加粗内容需要替换为实例自有信息,请根据实际情况替换)。 package main import ( "context" "fmt" "os" "time" "github.com/apache/rocketmq-client-go/v2" "github.com/apache/rocketmq-client-go/v2/primitive" "github.com/apache/rocketmq-client-go/v2/producer" ) func main() { namesrvs := []string{"192.168.0.1:8100"} traceCfg := &primitive.TraceConfig{ Access: primitive.Local, Resolver: primitive.NewPassthroughResolver(namesrvs), } p, _ := rocketmq.NewProducer( producer.WithNsResolver(primitive.NewPassthroughResolver([]string{"192.168.0.1:8100"})), producer.WithRetry(2), producer.WithTrace(traceCfg)) err := p.Start() if err != nil { fmt.Printf("start producer error: %s", err.Error()) os.Exit(1) } res, err := p.SendSync(context.Background(), primitive.NewMessage("topic1", []byte("Hello RocketMQ Go Client!"))) if err != nil { fmt.Printf("send message error: %s\n", err) } else { fmt.Printf("send message success: result=%s\n", res.String()) } time.Sleep(10 * time.Second) err = p.Shutdown() if err != nil { fmt.Printf("shutdown producer error: %s", err.Error()) } } 消费者开启消息轨迹(以下加粗内容需要替换为实例自有信息,请根据实际情况替换)。 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() { namesrvs := []string{"192.168.0.1:8100"} traceCfg := &primitive.TraceConfig{ Access: primitive.Local, Resolver: primitive.NewPassthroughResolver(namesrvs), } c, _ := rocketmq.NewPushConsumer( consumer.WithGroupName("testGroup"), consumer.WithNsResolver(primitive.NewPassthroughResolver([]string{"192.168.0.1:8100"})), consumer.WithTrace(traceCfg), ) err := c.Subscribe("TopicTest", 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()) } }
  • 操作步骤(Java) 在客户端开启消息轨迹的方法如下: 生产者开启消息轨迹(除事务消息以外的消息类型) 构造函数的“enableMsgTrace”参数传入“true”,例如: DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName", true); 生产者开启消息轨迹(事务消息) 构造函数的“enableMsgTrace”参数传入“true”,例如: TransactionMQProducer producer = new TransactionMQProducer(null, "ProducerGroupName", null, true, null); 消费者开启消息轨迹 构造函数的“enableMsgTrace”参数传入“true”,例如: DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("ConsumerGroupName", true);
  • 示例流程 图1 给用户授权DMS for RocketMQ权限流程 创建用户组并授权 在IAM控制台创建用户组,并授予DMS for RocketMQ的管理员权限“DMS ReadOnlyAccess”。 创建用户并加入用户组 在IAM控制台创建用户,并将其加入1中创建的用户组。 用户登录并验证权限 新创建的用户登录控制台,切换至授权区域,验证权限: 在“服务列表”中选择分布式消息服务RocketMQ版,进入RocketMQ实例主界面,单击右上角“购买RocketMQ实例”,尝试购买RocketMQ实例,如果无法购买RocketMQ实例(假设当前权限仅包含DMS ReadOnlyAccess),表示“DMS ReadOnlyAccess”已生效。 在“服务列表”中选择云硬盘(假设当前策略仅包含DMS ReadOnlyAccess),若提示权限不足,表示“DMS ReadOnlyAccess”已生效。
  • DMS for RocketMQ自定义策略样例 如果系统预置的DMS for RocketMQ权限,不满足您的授权要求,可以创建自定义策略。自定义策略中可以添加的授权项(Action)请参考细粒度策略支持的授权项。 目前华为云支持以下两种方式创建自定义策略: 可视化视图创建自定义策略:无需了解策略语法,按可视化视图导航栏选择云服务、操作、资源、条件等策略内容,可自动生成策略。 JSON视图创建自定义策略:可以在选择策略模板后,根据具体需求编辑策略内容;也可以直接在编辑框内编写JSON格式的策略内容。 具体创建步骤请参见:创建自定义策略。本章为您介绍常用的DMS for RocketMQ自定义策略样例。 DMS for RocketMQ的权限与策略基于分布式消息服务DMS,因此在IAM服务中为DMS for RocketMQ分配用户与权限时,请选择并使用“DMS”的权限与策略。 示例1:授权用户删除实例和重启实例 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dms:instance:modifyStatus", "dms:instance:delete" ] } ] } 示例2:拒绝用户删除实例 拒绝策略需要同时配合其他策略使用,否则没有实际作用。用户被授予的策略中,一个授权项的作用如果同时存在Allow和Deny,则遵循Deny优先原则。 如果您给用户授予DMS FullAccess的系统策略,但不希望用户拥有DMS FullAccess中定义的删除实例权限,您可以创建一条拒绝删除实例的自定义策略,然后同时将DMS FullAccess和拒绝策略授予用户,根据Deny优先原则,则用户可以对DMS for RocketMQ执行除了删除实例外的所有操作。拒绝策略示例如下: { "Version": "1.1", "Statement": [ { "Effect": "Deny", "Action": [ "dms:instance:delete" ] } ] }