阿里云消息服务mns 已经提供队列(queue)和主题(topic)两种模型。其中队列提供的是一对多的<b>共享</b>消息消费模型,采用客户端主动<b>拉取(</b><b>pull</b><b>)</b>模式;主题模型提供一对多的<b>广播</b>消息消费模型,并且采用服务端主动<b>推送(</b><b>push</b><b>)</b>模式。上面两种模型基本能满足我们大多数应用场景。
推送模式的好处是即时性能比较好,但是需要暴露客户端地址来接收服务端的消息推送。有些情况下,比如企业内网,我们无法暴露推送地址,希望改用拉取(pull)的方式。虽然mns不直接提供这种消费模型,但是我们可以结合主题和队列来实现一对多的拉取消息消费模型。具体方案如下:
让主题将消息先推送到队列,然后由消费者从队列拉取消息。这样既可以做到1对多的广播消息,又不需要暴露消费者的地址;如下图所示:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuAzM0UGZjFTZyIWYygzN1EzM4ITO0QTZxcjZyYDN3AzNzUDMyITNkZ2LcNXZslmZxl3Lc12bj5ycj5Wd5lGbh5Sdvhmen5WYo1ibj1ycz92Lc9CX6MHc0RHaiojIsJye.png)
默认支持上述解决方案。其中
mnsclient 提供下面两个接口来快速创建cloudpulltopic
其中,topicmeta 是创建topic的meta 设置, queuenamelist里指定topic消息推送的队列名列表;needcreatequeue表明queuenamelist是否需要创建;queuemetatemplate是创建queue需要的queue meta 参数设置;