2015-08-31 55 views
0

我知道HTTP是基於文本的,而AMQP是基於二進制的,但爲什麼AMQP不能通過HTTP實現(意味着每個二進制消息都是作爲HTTP負載發送的)?我認爲這是因爲它不得不不斷地序列化/反序列化每個來回都會很慢。爲什麼RabbitMQ不是通過HTTP而是通過HTTP來支持AMQP?

STOMP協議如何解決這個問題?我知道它會將二進制到文本的轉換移動到服務器上,但是代價是「消息」更大,所以它比可以序列化/反序列化AMQP的JS客戶端要快得多嗎?

+0

「爲什麼不」問題通常是無法回答的。它並不是因爲它沒有。也許有一個技術障礙使得它變得不可能,但是如果它的設計不同,它可能已經適應了。也許原因只是這不是開發人員所關注的。爲什麼它不在Atari上運行?那麼......因爲沒有人在Atari上做過工作...... – deceze

回答

0

雖然這個問題往往是主要基於輿論,看看部1.2.4高級消息隊列協議(AMQP)AMQP Protocol Specification

AMQ模型的設計是從動通過這些要求:

  • 爲了保證符合實現之間的互操作性。
  • 提供對服務質量的明確控制。
  • 要在命名中保持一致和明確。
  • 允許通過協議完成服務器佈線配置。
  • 使用可輕鬆映射到應用程序級API的命令表示法。
  • 要清楚,所以每個操作只能做一件事。

AMQP傳輸層的設計是由這些主 要求驅動時,沒有特定的順序:

  • 得緊湊,使用該包,並迅速解壓縮的二進制編碼。
  • 處理任何大小的消息沒有顯着限制。
  • 通過單個連接傳送多個通道。
  • 壽命長,沒有明顯的內部限制。
  • 允許異步命令管道襯裏。
  • 易於擴展以處理新的和變化的需求。
  • 與未來版本向前兼容。
  • 可修復,使用強大的斷言模型。
  • 對編程語言保持中立。
  • 適合代碼生成過程。

爲了更好的理解(例如爲何一個決定被優於另一個)通過整個說明書中讀出強烈建議。

相關問題