閱讀933 返回首頁    go 財經資訊


常見問題__FAQ_開發人員指南_消息服務-阿裏雲

什麼是 MNS?

  • MNS 是 Aliyun Message Service 的簡稱,是阿裏雲提供的一種高效、可靠、安全、便捷、可彈性擴展的分布式消息服務。
  • MNS 能夠幫助應用開發者在他們應用的分布式組件上自由的傳遞數據,構建鬆耦合係統。

用 MNS 可以做什麼?

典型的使用場景:

  1. 將 MNS 與其他阿裏雲產品集成,讓應用程序更加可靠、靈活。
  2. 將 MNS 用作工作隊列,其中每條消息代表一項任務,需要通過一個流程來完成。一台或多台 ECS 可以從隊列中讀取並執行任務。
  3. 將業務流程中重要事件的通知保存在 MNS 中,每個事件在隊列中都有一條對應的消息,需要知曉該事件的應用程序可以讀取和處理對應的消息。

阿裏雲各地域對應關係說明

隨著阿裏雲業務的不斷發展,產品的地域也不斷豐富,為了規範命名和適應國際化發展,阿裏雲將於2016年3月29日對各雲產品地域進行更名,新舊名稱對應關係如下表:

原名稱 新的名稱 英文名稱
青島 華北1 North China 1
北京 華北2 North China 2
杭州 華東1 East China 1
上海 華東2 East China 2
深圳 華南1 South China 1

MNS 不同地域的接入地址是什麼?

區域 公網訪問地址 私網訪問地址 VPC私網訪問地址
華北1 http(s)://{AccountId}.mns.cn-qingdao.aliyuncs.com https://{AccountId}.mns.cn-qingdao-internal.aliyuncs.com 暫無
華北2 http(s)://{AccountId}.mns.cn-beijing.aliyuncs.com https://{AccountId}.mns.cn-beijing-internal.aliyuncs.com https://{AccountId}.mns.cn-beijing-internal-vpc.aliyuncs.com
華東1 http(s)://{AccountId}.mns.cn-hangzhou.aliyuncs.com https://{AccountId}.mns.cn-hangzhou-internal.aliyuncs.com https://{AccountId}.mns.cn-hangzhou-internal-vpc.aliyuncs.com
華東2 http(s)://{AccountId}.mns.cn-shanghai.aliyuncs.com https://{AccountId}.mns.cn-shanghai-internal.aliyuncs.com https://{AccountId}.mns.cn-shanghai-internal-vpc.aliyuncs.com
華南1 http(s)://{AccountId}.mns.cn-shenzhen.aliyuncs.com https://{AccountId}.mns.cn-shenzhen-internal.aliyuncs.com https://{AccountId}.mns.cn-shenzhen-internal-vpc.aliyuncs.com
亞太(新加坡) http(s)://{AccountId}.mns.ap-southeast-1.aliyuncs.com https://{AccountId}.mns.ap-southeast-1-internal.aliyuncs.com https://{AccountId}.mns.ap-southeast-1-internal-vpc.aliyuncs.com
美國西部1(矽穀) http(s)://{AccountId}.mns.us-west-1.aliyuncs.com https://{AccountId}.mns.us-west-1-internal.aliyuncs.com https://{AccountId}.mns.us-west-1-internal-vpc.aliyuncs.com
亞太東北1(日本) http(s)://{AccountId}.mns.ap-northeast-1.aliyuncs.com https://{AccountId}.mns.ap-northeast-1-internal.aliyuncs.com
亞太東南2(悉尼) http(s)://{AccountId}.mns.ap-southeast-2.aliyuncs.com https://{AccountId}.mns.ap-southeast-2-internal.aliyuncs.com
歐洲中部1(法蘭克福) http(s)://{AccountId}.mns.eu-central-1.aliyuncs.com https://{AccountId}.mns.eu-central-1-internal.aliyuncs.com
中東東部1(迪拜) http(s)://{AccountId}.mns.me-east-1.aliyuncs.com https://{AccountId}.mns.me-east-1-internal.aliyuncs.com

為了幫助保護用戶的數據安全,MNS在公網提供了Https的接口,隻需要把公網訪問地址的https://換成https://即可。

AccountId 是什麼?

Account ID 在阿裏雲注冊用戶的帳號 ID,在阿裏雲官網可以查看。

MNS 提供哪些可用的操作?

MNS 隊列模型支持的操作指令有:

操作 描述
CreateQueue 創建一個新的消息隊列
SetQueueAttributes 修改隊列的屬性
GetQueueAttributes 獲取隊列的屬性
DeleteQueue 刪除一個隊列
ListQueue 列出用戶名下的隊列列表
SendMessage 生產者發送消息到指定的隊列
BatchSendMessage 生產者批量發送消息到指定的隊列
ReceiveMessage 消費者消費隊列的消息
BatchReceiveMessage 消費者批量消費隊列的消息
DeleteMessage 刪除已經被消費過的消息
BatchDeleteMessage 批量刪除已經被消費過的消息
PeekMessage 消費者查看隊列的消息
BatchPeekMessage 消費者批量查看隊列的消息
ChangeMessageVisibility 修改被消費過並且還處於的 Inactive 的消息到下次可被消費的時間

MNS 主題模型支持的操作指令有:

操作 描述
CreateTopic 創建一個新的主題
SetTopicAttributes 修改主題的屬性
GetTopicAttributes 獲取主題的屬性
DeleteTopic 刪除一個主題
ListTopic 列出用戶名下的主題列表
Subscribe 訂閱一個主題
SetSubscriptionAttributes 修改 Subscription 的屬性
GetSubscriptionAttributes 獲取 Subscription 的屬性
Unsubscribe 取消訂閱主題
ListSubscriptionByTopic 列出一個主題的 Subscription 列表
PublishMessage 發布消息到主題

MNS 相對於自主研發、商用或開源的消息隊列係統有哪些好處?

與自行構建係統來管理消息隊列或使用商用、開源的消息和通知服務相比,使用MNS的好處是:

  1. 無需大量前期投入來進行開發、配置;
  2. 隨著你業務量的不斷增大,無需持續投入硬件和管理資源;
  3. 缺省提供消息冗餘存儲,以便在硬件發生故障時不會丟失消息,相應的係統投入、開發、配置和部署將更為簡單;
  4. 無需為消息服務後期投入部署和維護的資源,隻需簡單配置即可用於生產環境。

如何使用 MNS?

  1. 注冊阿裏雲賬號並在線開通 MNS 服務
  2. 通過 管理控製台-賬號管理 獲取帳號 ID,單擊 AccessKeys 訪問密鑰(AccessKeyID)
  3. 進入消息服務管理控製台可以體驗可視化的隊列創建和刪除、收發消息等基本操作
  4. 在應用程序中調用 API 接口(SDK)執行MNS的所有操作

係統中如何標識消息?

  • MessageId 用來標識在隊列/主題中的一個消息,在一個隊列/主題中每個消息都有唯一的MessageId,但在不同的隊列/主題之間中並不唯一。
  • 當消息發送到 MNS 隊列/主題時,MNS 會生成一個 MessageId,此 ID 一旦產生就不會改變。
  • 在隊列模式下,當消息被取出時,MNS 會將消息的消息體、MessageId 以及該次請求的臨時句柄( ReceiptHandle )一齊返回給用戶。在有效期內,用戶消費完畢之後,使用 ReceiptHandle 進行消息的刪除。

MNS 是否支持長輪詢?

支持!與傳統的短輪詢相比,長輪詢隻會在消息進入隊列或長輪詢超時時才返回響應。一旦消息可用,長輪詢可立即以簡單經濟地方式從您的 MNS 隊列檢索消息。

有關長輪詢的具體設置,請參照 MNS API 文檔中有關 PollingWaitSeconds 屬性的說明。

MNS 是否提供對消息的先入先出(FIFO)訪問?

MNS 消費消息時盡量做到先進先出,正是因為分布式消息隊列的一些特性並不能保證你能按照消息的發送順序消費消息,如果你的業務必需先進先出,建議在消息中加入序號信息以便消費消息後進行重新排序。

MNS 是否可以與其他阿裏雲產品協作使用?

MNS 可以與 ECS、OSS 和 OTS 等阿裏雲服務一起使用,從而讓應用程序具有更好的靈活性和可擴展性。常見的使用案例包括:創建需要互相通信卻又不能同時處理相同工作量的多個組件或模塊。在此情形中,MNS 隊列可以承載消息,讓用戶在 ECS 實例上運行的應用程序能夠有序地進行處理。ECS 實例可以讀取該隊列,處理任務,然後將結果作為消息發布到另一MNS隊列(可能由其他應用程序進行進一步處理)。由於 ECS 允許應用程序動態擴展,應用程序開發者可根據 MNS 隊列中的消息數(工作量),輕鬆改變計算實例的數量,確保作業得以及時處理。

如何確保在 MNS 中存儲的數據的可靠性?

MNS 將所有隊列和消息存儲在阿裏雲高可靠、高可用的數據中心組成的網絡中。所有消息冗餘地存儲在多台服務器上,當某台服務器出現問題時,冗餘數據將會自動拷貝至其他服務器;這意味著單台服務器不可用或網絡故障都不會對 MNS 隊列中消息的安全性造成任何影響。

MNS 如何保證多個消息的消費者訪問同一消息隊列,而不會丟失消息或重複消費消息?

每個 MNS 隊列都具有可配置的不可見時間段屬性(即隊列的取出消息隱藏時長屬性)。當隊列中的某條消息被取出後,在不可見時間段內,其他消費者將無法獲取到該條消息。如果用戶在不可見時間段內完成了消息的消費,則需要通過臨時句柄(ReceiptHandle)進行消息的刪除;如果超過不可見時間仍未完成消費,則需要發送不可見時間段的延長請求(ChangeVisibilityTimeout);否則消息將會在不可見時間段結束後重新被其他消費者取出。

每條消息會被接收多少次?

我們會在係統設計上保證您隊列中的所有消息至少被消費一次,建議您加強應用服務的容錯性,以便多次處理同一消息時不會造成錯誤或不一致。

如何保證我的消息隊列中的消息是安全的?

我們提供了安全可靠的身份驗證機製,確保您的 MNS 隊列受到保護,防止遭到未經授權的訪問。隻有阿裏雲賬戶擁有者才能訪問其創建的隊列。

如何配置 MNS 以支持更長的消息保留期?

要配置消息保留期限,請使用 SetQueueAttributes 方法設置MessageRetentionPeriod 屬性。此屬性用於指定消息在MNS隊列中保留的秒數。目前,消息保留期限的默認值為4天。使用 MessageRetentionPeriod 屬性時,消息保留期限可以設置為 60 秒(1 分鍾)到最長1296000 秒(15 天)之間的任何值。

消息在 MNS 中可以保留多久?

MNS中的消息保留期限是可配置的,您可以設置為1分鍾到15天之間的任何值。默認值為4天;一旦達到消息保留期限,您的消息會被自動刪除。較長消息保留期選項可提供更大的靈活性,允許在消息產生和消耗之間存在更長的間隔。

如何配置 MNS 以支持更大的消息大小?

要配置最大消息大小,請使用 SetQueueAttributes 方法設置MaximumMessageSize 屬性。此屬性指定MNS隊列中的消息可以包含的字節數限值。可以設置為1024字節(1KB) 到最大65536 字節 (64KB)之間的任何值。如果消息長度超過了64KB,建議將數據存儲在 OSS 中,MNS 隻存儲數據訪問地址。

對於較長時間沒有任何消息的隊列,會怎樣?

在您正常使用 MNS 服務期間,阿裏雲不會對非活躍的隊列/主題進行刪除操作。但是,如果您的 MNS 使用權限因為欠費或其他原因被停止了,那麼我們將刪除您名下的所有隊列和主題。

為什麼我的簽名總是沒算對?

有關簽名計算的原理以及相關注意事項請參照 MNS API 參考手冊,這裏結合實例對簽名方法進行說明:請求的HTTP header參數為:

  1. GET /MyQueue HTTP/1.1
  2. Host: $AccountId.mns.cn-hangzhou.aliyuncs.com
  3. Date: Thu, 09 Jul 2015 03:01:34 GMT
  4. x-mns-version:2015-06-06

需要進行加密的簽名源字串為:

  1. GET
  2. (換行符)
  3. (換行符)
  4. Thu, 09 Jul 2015 03:01:34 GMT
  5. x-mns-version:2015-06-06
  6. /MyQueue

假設accessId為: TestAccessID, accesskey為:TestAccessSecret經過加密算法得出的簽名值為:uwx3yeWoILzgmvesW0BQSgfM7b8=

不同地域中的同名隊列是同一個隊列嗎?

不是,不同地域的同名隊列是各自獨立的。

刪除隊列實例之後,是否仍然會繼續計費?

如果您不再需要使用某個隊列,在刪除該隊列實例之後,同時需要停止針對該隊列的所有API請求,否則MNS仍然會按照API請求次數進行計費。

刪除主題實例之後,是否仍然會繼續計費?

如果您不再需要使用某個主題,在刪除該主題實例之後,從刪除的第二天起將不再收取該主題的實例占用費,同時需要停止針對該主題的所有API請求,否則MNS仍然會按照API請求次數進行計費。

最後更新:2016-12-20 11:39:09

  上一篇:go 雲監控【主題模型】__開發人員指南_消息服務-阿裏雲
  下一篇:go 消息通知常見問題__FAQ_開發人員指南_消息服務-阿裏雲