日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RabbitMQ--基础--04--运转流程

發布時間:2024/1/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RabbitMQ--基础--04--运转流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

RabbitMQ–基礎–04–運轉流程


1、在最初狀態下,Producer(生產者)發送消息的流程

  • Producer 連接到 Broker,建立一個Conection(TCP連接),開啟一個Channel(信道)
  • Producer 聲明一個交換機,并設置相關屬性,屬性包括如下
  • 交換機類型
  • 是否持久化等
  • Producer 聲明一個隊列,并設置相關屬性,屬性包括如下
  • 是否持久化
  • 是否排他
  • 自動刪除等
  • Producer 通過綁定鍵(BindingKey)將交換機(Exchange)和隊列(Queue)綁定起來
  • Producer 發送消息至 Broker,其中信息包括
  • 路由鍵
  • 交換器等信息
  • 相應的交換機 Exchange 根據接收到的路由鍵查找相匹配的隊列
  • 如果找到,則將從Producer 發送過來的消息存入相應的隊列中去
  • 如果沒有找到,則根據Producer配置的屬性
  • 可以選擇丟棄
  • 可以選擇回退給Producer
  • 關閉信道 Channel,Connection
  • 2、Consumer(消費者)接收消息的過程

  • Consumer連接到 Broker, 建立一個Conection(TCP 連接),開啟一個Channel(信道)
  • Consumer向 Broker 請求消費相應隊列中的消息,可能會設置相應的回調函數,以及做一些準備工作
  • 等待 Broker 回應并投遞相應隊列中的消息,Consumer接收消息
  • Consumer確認 ACK 接收到的消息
  • RabbitMQ 從隊列中刪除相應已經被確認的消息
  • 關閉信道、連接
  • 3、consumer接收消息后,隊列對ACK的處理情況

  • 如果consumer接收消息后發送ack,rabbitmq會刪除隊列中這個消息,發送另一條消息給consumer。
  • 如果cosumer接收了消息,但在發送ack之前斷開連接,rabbitmq會認為這條消息沒有發送成功,在consumer再次連接的時候,rabbitmq會再次發送這條消息。
  • 如果consumer接收了消息,但是程序中如果忘記了ack/nack,rabbitmq不會重復推此消息到consumer,但是,在consumer再次連接的時候,rabbitmq會再次發送這條消息。
  • rabbitmq2.0.0和之后的版本支持consumer reject某條(類)消息,可以通過設置requeue參數中的reject為true,那么rabbitmq將會把消息發送給下一個注冊的consumer。
  • 4、總結

  • 根據上述過程,無論Producer還是Consumer,都需要和 RabbitMQ Broker 建立連接,這個連接就是一條 TCP連接(Connection)
  • 一旦 TCP連接 建立起來,客戶端緊接著可以創建一個 AMQP 信道(Channel),每個信道都會被指派一個唯一的 ID。
  • 信道(Channel) 是建立在 Connection 之上的虛擬連接,RabbitMQ 處理每條 AMQP 指令都是通過信道 Channel 完成的。
  • 4.1、我們完全可以直接使用 Connection 就能完成信道的工作,為什么還要引入信道 Channel 呢?

    4.1.1、場景

    一個應用程序中有很多個線程需要從 RabbitMQ 中消費消息,或者生產消息,那么,必然需要建立很多個 Connection,也就是許多個 TCP連接。然而,對于操作系統而言,建立和銷毀 TCP連接 是非常昂貴的開銷,如果遇到使用高峰,性能瓶頸也隨之顯現。

    4.1.2、解決方案

  • RabbitMQ 采用類似于 NIO 的做法,選擇 TCP 連接復用,不僅可以減少性能開銷,同時也便于管理。
  • 每個線程把持一個信道,所以,信道復用了 Connection 的 TCP 連接。同時,RabbitMQ 可以確保每個線程的私密性,就像擁有獨立的連接一樣。
  • 總結

    以上是生活随笔為你收集整理的RabbitMQ--基础--04--运转流程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。