您在消息服务MNS创建的队列可订阅发送至消息服务MNS主题的消息。如有消息发布至主题,主题会通过内部数据通道,将消息推送至各个订阅该主题消息的队列。您只需对订阅了该主题的队列轮询拉取。本文介绍队列推送的使用场景、在控制台上的具体操作,以及提供通过SDK和API实现队列推送的示例代码。

使用场景

将主题消息推送至队列的使用场景如下:

  • 订阅者无需保持在线状态。
  • 订阅者机器部署在VPC环境。
  • 订阅者需要通过高并发提高消费速度。

创建主题

使用消息服务MNS创建一个主题,在以下的示例中命名为MyTopic。

  1. 在控制台顶部菜单栏,选择对应地域(Region),如华东1(杭州)。
  2. 在左侧导航栏,单击主题。在主题页面的右上角,单击创建主题
  3. 创建主题对话框中填写主题属性,单击确认创建主题

创建队列

使用消息服务MNS创建一个队列,在以下的示例中命名为MyQueue。

  1. 在左侧导航栏,单击队列
  2. 队列页面的右上角,单击创建队列
  3. 创建队列对话框中,填写队列属性,单击确认

创建订阅

  1. 在控制台主题页面,找到MyTopic主题,并在其操作列单击订阅详情
  2. 在展开区域的右上角,单击创建订阅创建订阅
  3. 在弹出的创建订阅对话框中,选择推送类型队列接收端地址填写为创建的队列名称。
    注意 此处并不会对队列是否存在做检测,请确保相应的队列已经创建。
    队列推送订阅消息

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);