天天看點

最佳實踐:如何基于MNS實作一對多拉取消息消費模型如何實作一對多拉取消息消費模型

阿裡雲消息服務mns 已經提供隊列(queue)和主題(topic)兩種模型。其中隊列提供的是一對多的<b>共享</b>消息消費模型,采用用戶端主動<b>拉取(</b><b>pull</b><b>)</b>模式;主題模型提供一對多的<b>廣播</b>消息消費模型,并且采用服務端主動<b>推送(</b><b>push</b><b>)</b>模式。上面兩種模型基本能滿足我們大多數應用場景。

推送模式的好處是即時性能比較好,但是需要暴露用戶端位址來接收服務端的消息推送。有些情況下,比如企業内網,我們無法暴露推送位址,希望改用拉取(pull)的方式。雖然mns不直接提供這種消費模型,但是我們可以結合主題和隊列來實作一對多的拉取消息消費模型。具體方案如下:

讓主題将消息先推送到隊列,然後由消費者從隊列拉取消息。這樣既可以做到1對多的廣播消息,又不需要暴露消費者的位址;如下圖所示:

最佳實踐:如何基于MNS實作一對多拉取消息消費模型如何實作一對多拉取消息消費模型

預設支援上述解決方案。其中

mnsclient 提供下面兩個接口來快速建立cloudpulltopic

其中,topicmeta 是建立topic的meta 設定, queuenamelist裡指定topic消息推送的隊列名清單;needcreatequeue表明queuenamelist是否需要建立;queuemetatemplate是建立queue需要的queue meta 參數設定;