欢迎使用腾讯云消息队列 CMQ(Cloud Message Queue)。
腾讯云消息队列(Cloud Message Queue,以下简称 CMQ)是分布式的消息队列服务,用于存储进程间传输的消息,为分布式部署的不同应用之间或者一个应用的不同组件之间提供基于消息的可靠的异步通信服务。消息被存储在高可靠、高可用的消息队列中,多进程可以同时读写,互不干扰。使用腾讯云 CMQ,用户可以在执行不同任务的应用程序的分布式组件之间传递信息,既不会丢失消息,也不要求各个组件始终处于可用状态。
队列在数据发送端和数据接收端之间起到缓冲作用。在数据发送端的工作速度快于数据接收端时,或者在数据发送端或数据接收端仅间歇性地连接到网络时,队列可解决因此而产生的问题。
传统的进程通信模式由客户端请求服务器端的服务并等待服务器的响应。然而这种模式有很多弊端:例如,当网络状况不好时,客户端的请求可能会丢失;当服务器端处理时间过长,可能导致客户端长时间等待以致请求超时而失败等。
为此,腾讯云引入了消息队列服务进行消息分发和管理。使用腾讯云 CMQ,您可以分离应用程序的组件以便其独立运行,同时还可以简化组件间的消息管理。分布式应用程序的任何组件均可将消息存储在队列中,腾讯云 CMQ 确保每条消息至少传送一次,并且支持多次读取和写入。单个队列可由多个分布式应用程序组件同时使用而无需这些组件之间的互相协作。所有组件均可使用 CMQ API 以编程方式检索和操作消息。
支持的全部操作可参见 API 概览页。
请确保在使用这些接口前,已充分了解了 CMQ 产品说明。
注意:协助者账号目前不能用于 CMQ 的操作。
队列模型
术语表
本文档涉及的一些常用术语如下:
术语 | 全称 | 中文 | 说明 |
---|---|---|---|
CMQ | Cloud Message Queue | 云消息队列 | 腾讯云的消息服务包括了队列模型、主题模型、高性能消息服务等。 |
Queue | Queue | 队列 | 队列是一种先进先出的数据模型,生产者可并发地往队列尾部添加数据,消费者可并发地从队列头部拉取(pull)数据。 |
Active | Active | 可被消费(可见)状态 | 消息处于 Active 状态时,可被所有消费者争抢消费,但只有一个消费者能成功将其消费,此时消息变为 Inactive 状态,对其他消费者不可见。 |
Inactive | Inactive | 不可被消费(不可见)状态 | 消息处于 Inactive 状态时,说明消息正在被某个消费者消费的过程中,其他消费者不能消费该消息。 |
(Batch)ReceiveMessage | (Batch)Receive Message | 消费消息 | ReceiveMessage操作仅会把消息从 Active 状态置为 Inactive 状态,使该消息不能被其他消费者消费到。但消费完后要显式调用(Batch)DeleteMessage 操作才能把消息从队列中删除掉,否则消息过了 visibilityTimeout 指定的时间后,重新变为 Active 状态,又可被其他消费者消费到,造成意料之外的重复消息。 |
maxMsgHeapNum | Maximum Message Heap Number | 最大消息堆积数 | 为防止消息未被及时消费导致消息丢失,消息服务具有堆积消息的功能。堆积的消息数是有上限的,超过上限后生产者不能再往队列中添加消息。等消息被消费完删除后,生产者又可以往队列中添加消息。 |
pollingWaitSeconds | Polling Wait Seconds | 消息接收长轮询等待时间 | 消费者想向队列中拉取消息进行消费时,队列可能暂时没有数据。消费者可能不想马上返回(类似于非阻塞模式),想等待一段时间看会不会有消息过来(类似于阻塞模式),pollingWaitSeconds 类似于阻塞模式下的超时时间,超过这个时间,不管有没有消息,都会返回。如果想非阻塞地消费消息,把该值置为0即可。 |
msgRetentionSeconds | Message Retention Seconds | 消息生命周期 | 堆积在队列中的消息是有保留时间的,超过该时间仍未被消费者消费,则会被队列删除掉,消费者再也无法消费到。 |
receiptHandle | Receipt Handle | 消息收据句柄 | 该句柄是消息被消费时返回的,只有当前正在消费该消息的句柄才能删除消息。如果消费时间过长,超过了 visibilityTimeout,则消息又被其他消费者消费到,那之前消费者的获取该消息的句柄就会失效,不能用于删除消息。 |
qps throttling | QPS Throttling | QPS 限制 | 该术语本来的含义是每秒钟请求数限制,但实际上是每秒钟消息数的限制。对于单次接口(SendMessage、ReceiveMessage、DeleteMessage),还是每秒钟请求次数。但是对于批量接口(BatchSendMessage、BatchReceiveMessage、 BatchDeleteMessage),则是1s内,所有批量值之和。这样限制的目的是为了给用户提供一个更加稳定和公平的产品。如果您需要更大的消息数限制值,可以 提交工单 向我们申请。 |
输入参数与返回参数释义
limit 和 offset
limit 和 offset 是用来控制分页的参数。当相应结果是列表形式时,如果数量超过了 limit 所限定的值,那么只返回 limit 个值。用户可以通过 limit 和 offset 两个参数来控制分页:limit 为单次返回的最多条目数量,offset 为偏移量。
例如,参数 offset=0&limit=20 返回第0到20项,offset=20&limit=20 返回第20到40项,offset=40&limit=20 返回第40到60项;以此类推。id.n
id.n 是同时输入多个参数的格式。当遇到形如这样的格式时,则该输入参数可以同时传多个。
例如,id.0=“10.12.243.21”&id.1=“10.12.243.21”&id.2=“10.12.243.21”&id.3=“10.12.243.21”...以此类推(以下标0开始)。
API 快速入门
用户可以通过 CMQ SDK(推荐,目前提供多个语言版本),或直接调用云 API(较为麻烦,建议 SDK 语言之外的用户使用)使用 CMQ 的服务:
- 选择地域和内外网。与其他云产品不同,消息队列 API 的请求域名随地域不同而变化,需选择地域对应的域名,请求域名的构成规则形如
cmq-queue-region.api.qcloud.com/v2/index.php
,其中 region 字段需用具体地域替换:gz(广州)、sh(上海)、bj(北京)。如果是用户使用的机器是腾讯云服务器,则应优先选择内网域名,否则选外网域名。 - 创建队列。SDK(或云 API)调用 CreateQueue 接口。
- 发送消息。SDK(或云 API)调用 SendMessage(或BatchSendMessage)接口。
- 消费消息。SDK(或云 API)调用 ReceiveMessage(或BatchReceiveMessage)接口。
- 删除消息。SDK(或云 API)调用 DeleteMessage(或BatchDeleteMessage)。
- 删除队列。SDK(或云 API)调用 DeleteQueue 接口。
主题模型
术语表
本文档涉及的一些常用术语如下:
术语 | 英文 | 说明 |
---|---|---|
订阅者 | Subscriber | 指 CMQ-Topic 模式下,服务的订阅方。 |
生产 | Produce | 指生产者,往 Topic 内写入消息的操作。 |
投递 | Subscription | 指 Topic 向订阅者投递消息的过程。 |
消息接收模式(PUSH) | Message-receiving model(PUSH) | CMQ 的 Topic 模型,已支持主动推送的 PUSH 模式。 |
重试策略 | NotifyStrategy | 订阅的 NotifyStrategy 属性,向接收端推送消息出现错误时的重试策略。该策略默认开启。有以下两个选项,必须勾选其中一个。 a.退避重试:重试3次,间隔时间10 - 20s之间的一个随机值,超过3次后,该条消息对于该订阅者丢弃,不会再重试 b. 衰退指数重试(默认勾选):重试176次,总计重试时间为1天,间隔时间依次为:2^0,2^1, …, 512, 512, …, 512秒。 |
消息生命周期 | msgRetentionSeconds | 消息在TOPIC中最长的存活时间,从发送到该队列开始经过此参数指定的时间后,不论消息是否被取出过都将被删除;单位为秒,默认值为86400s(1天),不允许修改。 |
消息最大长度 | MaxMsgSize | 限定允许发送到该队列的消息体的最大长度;单位为 byte, 有效值范围为1024 - 65536byte,即1K - 64K。 |
消息堆积 | MessageRetentionPeriod | 默认开启。存在生产者的消息,还未触发投递到订阅者,或订阅者接收消息失败,暂时堆积到 Topic 中,进行多次重试。该项目无法配置,最大堆积时间为1天。 |
重试验证 | Status code | Topic 投递到订阅者后,若 HTTPS 返回码为200,则认为成功。 |
添加订阅者标签 | FilterTag | 添加订阅者时,可增加 FilterTag,增加 FilterTag 后,该订阅者仅能收到带该 FilterTag 的消息。单个 Tag 不超过16个字符的字符串,单个订阅者可最多添加5个 Tag。只要其中某个 Tag,能匹配 Topic 的过滤标签,都能收到该次 Topic 投递的消息,若消息不带任何标签,则该订阅者无法收到该类型消息。 |
添加消息过滤标签 | Messagetag | 即消息标签、消息类型,用来区分某个 CMQ 的 Topic 下的消息分类。MQ允 许消费者按照 Tag 对消息进行过滤,确保消费者最终只消费到他关心的消息类型。该功能默认不开启,未开启时,所有消息向所有订阅者发送,当订阅者设置了 Tag 时,由于不匹配,该订阅者无法收到消息。消息过滤标签描述了该订阅中消息过滤的标签(标签一致的消息才会被推送)。单个 Tag 不超过16个字符的字符串,单个 Message 可最多添加5个 Tag。 |
开启日志轨迹 | LoggingEnabled | 是否开启日志管理功能,True 表示启用,False 表示停用。启用后,CMQ 的原始 Log 会写入对象存储 COS。 且用户可通过 CMQ 控制台,做 Log 聚合查询,免除自行搭建分析系统的繁琐。 |
输入参数与返回参数释义
limit 和 offset
limit 和 offset 用来控制分页的参数。当相应结果是列表形式时,如果数量超过了 limit 所限定的值,那么只返回 limit 个值。用户可以通过 limit 和 offset 两个参数来控制分页:limit 为单次返回的最多条目数量,offset 为偏移量。
例如,参数 offset=0&limit=20 返回第0到20项,offset=20&limit=20 返回第20到40项,offset=40&limit=20 返回第40到60项;以此类推。id.n
id.n 是同时输入多个参数的格式。当遇到形如这样的格式时,那么该输入参数可以同时传多个。
例如,id.0=“10.12.243.21”&id.1=“10.12.243.21”&id.2=“10.12.243.21”&id.3=“10.12.243.21”...以此类推(以下标0开始)。
API 快速入门
用户可以通过 CMQ SDK(推荐,目前提供多个语言版本),或直接调用云 API(较为麻烦,建议 SDK 语言之外的用户使用)使用 CMQ 的服务:
- 选择地域和内外网。与其他云产品不同,消息队列 API 的请求域名随地域不同而变化,需选择地域对应的域名,请求域名的构成规则形如
cmq-topic-region.api.qcloud.com/v2/index.php
,其中 region 字段需用具体地域替换:gz(广州)、sh(上海)、bj(北京)。如果是用户使用的机器是腾讯云服务器,则应优先选择内网域名,否则选外网域名。 - 创建主题。SDK(或云 API)调用 CreateTopic 接口。
- 修改主题属性。SDK(或云 API)调用 SetTopicAttributes接口。
- 获取主题列表。SDK(或云 API)调用 ListTopic 接口。
- 获取主题属性。SDK(或云 API)调用 GetTopicAttributes 接口。
- 删除主题。SDK(或云 API)调用 DeleteTopic 接口。
- 发布消息。SDK(或云 API)调用 PublishMessage 接口。
- 批量发布消息。SDK(或云 API)调用 BatchPublishMessage 接口。
- 投递消息。
- 创建订阅。SDK(或云 API)调用 Subscribe 接口。
- 获取订阅列表。SDK(或云 API)调用 ListSubscriptionByTopic 接口。
- 修改订阅属性。SDK(或云 API)调用 SetSubscriptionAttributes 接口
- 获取订阅属性。SDK(或云 API)调用 GetSubscriptionAttributes 接口。
- 删除订阅。SDK(或云 API)调用 Unsubscribe 接口。