Pipe
命名管道(mkfifo)是 RabbitMQ 的前身嗎?
RabbitMQ 是用於程序間通信的,如管道和命名管道嗎?RabbitMQ 與命名管道相比如何?分佈式系統除外。
(RabbitMQ,對於那些沒有接觸過的人,是一個開源的、中間件、企業消息代理,它講 AMQP。)
RabbitMQ 是用於程序間通信的,如管道和命名管道嗎?
不,這不是理解 RabbitMQ 的最佳方式,也不是理解基於消息傳遞代理的中間件的最佳方式。
如果您正在尋找一種範式來戴上您的隱喻帽子以開始理解 RabbitMQ 及其同類產品,那麼根本不要考慮低級 IPC。
想想 Unix 郵件。
- 程序生成消息。
- 它們有標題和正文。
- 它們甚至有(可選的)消息 ID、MIME 內容類型、時間戳和回复地址。
- 他們被送到經紀人那裡。
- 代理對它們進行路由,並根據路由拓撲將它們放入隊列中,其他程序從中檢索它們。
- 有扇出交換會創建多個消息副本以繼續發送。
- 甚至還有死信箱。
當然,一旦了解細節,它就不是郵件了。
- 路由拓撲受客戶端程序控制,使用與發送和接收消息相同的客戶端-伺服器協議。
- DNS 基本上不涉及。
- 它不是儲存轉發。
- 扇出交換只是非常粗略地類似於郵件列表。
- 客戶端程序可以使用該協議來清除隊列(https://askubuntu.com/a/707523/43344)並設置消息的 TTL。
- 有不同程度的持久性和持久性。
- 消息的接收可能涉及握手、正面和負面以及以程式方式強制重新傳遞。
- 有一個安全範例可以控制哪些客戶端可以訪問基礎設施的哪些部分,允許管理員(比如)限制使用使用者憑據“JdeBP”登錄的客戶端可以發送消息的位置。
但是郵件對於理解這些概念來說是一個很好的初步近似,無論如何,這比從比較 IPC 或 RPC 子系統開始要好得多。