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

使用场景

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

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

前提条件

您已完成以下操作:
  • 注册阿里云账号。
  • 开通MNS服务。详情请参见开通MNS服务

创建主题

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

  1. 登录MNS控制台
  2. 在顶部菜单栏,选择地域。
  3. 在左侧导航栏,单击主题
  4. 主题页面的右上角,单击创建主题
  5. 创建主题对话框,输入主题名称,输入消息最大长度,然后单击确定

创建队列

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

  1. 登录MNS控制台
  2. 在顶部菜单栏,选择地域。
  3. 在左侧导航栏,单击队列
  4. 队列页面的右上角,单击创建队列
  5. 创建队列对话框,进行相应配置,然后单击确定

创建订阅

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