HTTP SDK

最近更新时间: 2026-06-30 15:06:00

Demo工程使用

准备 Demo 环境

  1. 安装 IDE
    您可以安装 IntelliJ IDEA 或者 Eclipse,本文以 IntelliJ IDEA 为例进行说明。
    请在 下载 IntelliJ IDEA Ultimate 版本,并参考 IntelliJ IDEA 说明进行安装。
  2. 下载 Demo 工程
    请在 下载 CMQ-HTTP 的 Demo 工程 到本地,解压后即可看到本地新增的 cmq-java-sdk-master 文件夹。

配置 Demo 工程

  1. 创建资源
    您需要在控制台创建所需消息队列资源,包括 CMQ 队列名、SecretID、SecretKey。
  2. 导入 Demo 工程文件
    在 IDEA 的开机界面打开文件夹。
    打开文件夹后,Demo 工程文件存于/src/main/java/com/qcloud/cmq/example文件夹下。
  3. 配置 Demo 参数
    修改文件请求地址、密钥对等。以 Producer 为例,配置如下:
String secretId="获取的SecretID";   // 控制台账号访问管理可查看
String secretKey="获取的SecretKey"; // 控制台账号访问管理可查看
String endpoint = "https://cmq-topic-{$region}.api.qcloud.com"; // 控制台获取
String queueName = "test-queue";    //  队列名称
String topicName = "test-topic";    //  主题名称
Account account = new Account(endpoint, secretId, secretKey);

运行 Demo

使用队列模型收发消息

先运行 Producer 类发送消息,再运行 Consumer 类接受消息。
发送消息代码示例:

Queue queue = account.getQueue(queueName);
String msg = "hello!";
String msgId = queue.sendMessage(msg);
System.out.println("==> send success! msg_id:" + msgId);

接收/删除消息代码示例:

Message message = queue.receiveMessage();
System.out.println("==> receive a message msgId: " + message.msgId);
queue.deleteMessage(message.receiptHandle);

使用主题模型收发消息

运行 TopicDemo 类。发布消息示例:

Topic topic = account.getTopic(topicName)
String msg = "hello!";
String msgId = topic.publishMessage(msg);
System.out.println("==> publish success! msg_id:" + msgId);

订阅者可以填写一个 Queue,使用队列来接收发布的消息。订阅者需要去控制台创建

Message message = queue.receiveMessage();
System.out.println("==> receive a message msgId: " + message.msgId);
queue.deleteMessage(message.receiptHandle);

Tag消息

Topic 目前支持消息过滤,即消息标签、消息类型,用来区分某个 CMQ 的 Topic 下的消息分类。MQ 允许消费者按照标签对消息进行过滤,确保消费者最终只消费到他关心的消息类型。该功能默认不开启,未开启时,所有消息向所有订阅者发送;增加标签后,订阅者将仅能收到带该标签的信息。消息过滤标签描述了该订阅中消息过滤的标签(标签一致的消息才会被推送)。单个标签不超过16个字符,单个 Message 可最多添加5个标签。

有4个订阅者 A、B、C、D,A 消息标签是 apple,B 消息标签是 xiaomi,C 的消息标签是 imac+xiaomi,D 没有设置任何标签。
此时,有生产者 publish 到 Topic 100条消息,带的消息标签过滤为:apple、imac、iphone、macbook。此后 Topic 立即投递到 A、B、C、D。
场景分析

订阅者 消息标签 消息接收说明
A apple 由于 apple 能匹配消息过滤标签中的 apple,则能正常收到100条消息。
B xiaomi 不能收到任何消息。
C imac+xiaomi 由于其中一个标签 imac 能匹配,则能正常收到100条消息 。
D - 可以收到任何消息。

通过以上场景,标签匹配规律如下:

订阅者 订阅者有无 tag 有无消息 tag 消息接收说明
A 订阅者不匹配,不能收到消息。
B 投递时消息不用匹配,订阅者都能收到消息。
C 两者匹配的,才能收到消息。支持 N:M 匹配,如消息有10个 tag,订阅者有4个 tag,其中有1个 tag 相互能匹配上,则订阅者能收到消息。
D 投递后,所有订阅者都能收到消息。
String msg = "hello world, Time:" + new Date();
List<String> tagList = Collections.singletonList("This-is-A-Tag");
String messageId = topic.publishMessage(msg, tagList, null);

路由匹配

  • CMQ 的路由键匹配功能类似于 rabbitMQ 的 exchange queue,可以用于消息过滤,根据不同的条件使订阅者获取不同的消息。创建 topic 时,可开启【路由匹配键】。
  • Binding key、Routing key 是组合使用的,提供类似于 RabbitMQ 的消息过滤能力。发消息时配的 Routing key 是客户端发消息带的。创建订阅关系时配的 Binding key 是 topic 和 订阅者的绑定关系。
使用限制
  • Binding key 的数量不超过5个。单个 binding key 的长度 <= 64字节,用于表示发送消息的路由路径,最多含有15个“.”,即最多16个词组。
  • Routing key 的数量由1个字符串组成。单个 Routing key 的长度<=64 字节,用于表示发送消息的路由路径,最多含有15个“.”,即最多16个词组。
通配符说明
  • *(星号),可以替代一个单词(一串连续的字母串) ,不能为空。
  • #(井号):可以匹配零个或多个字符。
示例:
  • 订阅者是『1.*.0』,此时消息为『1.任意字符.0』,则订阅者都能收到消息。
  • 订阅者是『1.#.0』,此时消息为『1.2.3.4.4.2.2.0』,『1.0』则订阅者都能收到消息(消息中间元素随意) 。
  • 订阅者是『#』,则所有消息订阅者都能收到。

String msg = "hello world, Time:" + new Date();
String routeKey = "first.second.middle.middle2.last";
String messageId = topic.publishMessage(msg, null, routeKey);