您创建的队列可订阅发送至主题的消息。如有消息发布至主题,主题会通过内部数据通道,将消息推送至各个订阅该主题消息的队列。您只需对订阅了该主题的队列轮询拉取。本文介绍队列推送的使用场景、在控制台上的具体操作,以及提供通过SDK和API实现队列推送的示例代码。
使用场景
将主题消息推送至队列的使用场景如下:
- 订阅者无需保持在线状态。
- 订阅者机器部署在VPC环境。
- 订阅者需要通过高并发提高消费速度。
前提条件
创建主题
使用消息服务MNS创建一个主题,在以下的示例中命名为MyTopic。
- 登录消息服务MNS控制台。
- 在顶部菜单栏,选择地域。
- 在左侧导航栏,单击主题。
- 在主题页面的右上角,单击创建主题。
- 在创建主题对话框,输入主题名称,输入消息最大长度,然后单击确定。
创建队列
使用消息服务MNS创建一个队列,在以下的示例中命名为MyQueue。
- 登录消息服务MNS控制台。
- 在顶部菜单栏,选择地域。
- 在左侧导航栏,单击队列。
- 在队列页面的右上角,单击创建队列。
- 在创建队列对话框,进行相应配置,然后单击确定。
创建订阅
- 在主题页面,找到MyTopic主题,在其操作列单击订阅详情。
- 在展开区域的右上角,单击创建订阅。
- 在创建订阅对话框,然后单击确定。
- 推送类型:选择队列。
- 订阅名称:输入订阅的名称。
- 接收端地址:输入队列名称。
注意 此处不会对队列是否存在做检测,请确保相应的队列已经创建。
- 消息过滤标签:输入标签用于消息过滤。
- 重试策略:选择重试策略,决定向接收端推送消息时的重试策略。
- 消息推送格式:选择消息推送格式。
Java SDK订阅代码示例
您也可以通过SDK将消息推送至队列。下文以Java SDK为例说明。
client = new DefaultMNSClient(ServiceSettings.getMNSEndpoint(),
ServiceSettings.getMNSAccessKeyId(),
ServiceSettings.getMNSAccessKeySecret());
// 创建队列Queue。
String queueName = "JavaSDKTestQueue";
String subName = "JavaTestSub"
QueueMeta queueMeta = new QueueMeta();
queueMeta.setQueueName(queueName);
CloudQueue queue = client.createQueue(queueMeta);
// 创建主题Topic。
String topicName = "SampleTopic";
TopicMeta meta = new TopicMeta();
meta.setTopicName(topicName);
topic = client.createTopic(meta);
// 使用队列作为endpoint进行订阅。
String queueEndpoint = topic.generateQueueEndpoint(queueName);
SubscriptionMeta subMeta = new SubscriptionMeta();
subMeta.setSubscriptionName(subName);
subMeta.setNotifyStrategy(SubscriptionMeta.NotifyStrategy.EXPONENTIAL_DECAY_RETRY);
subMeta.setEndpoint(queueEndpoint);
String subUrl = topic.subscribe(subMeta);
在文档使用中是否遇到以下问题
更多建议
匿名提交