2 理解訊息通訊

2021-08-16 19:02:44 字數 1112 閱讀 6140

amqp訊息能以一對多的廣播方式進行路由,也可以選擇一對一的方式路由

2.1 消費者和生產者

rabbit是一種投遞服務,rabbitmq在應用程式和伺服器之間扮演者路由器的角色

生產者建立訊息,然後發布到**伺服器(rabbitmq),訊息有兩部分:有效載荷和標籤。有效載荷是你想要傳輸的資料。他可以是任何內容,乙個json陣列或者是你喜歡的mpeg,標籤描述了有效載荷,而且rabbitmq用它來決定誰將獲得資訊的拷貝

消費者它們連線到**伺服器上,並訂閱到佇列上。把訊息佇列想象成乙個具名郵箱,訊息到達郵箱,rabbitmq會將其傳送給其中乙個訂閱的/監聽的消費者。當消費者接收到訊息時,它只得到訊息的一部分:有效載荷。如果要想知道是誰生產的訊息的話,就要看生產者是否把傳送方資訊放入有效載荷中

通道:你必須首先連線到rabbit,才能消費或者發布訊息。通道是建立在真實的tcp連線內的虛擬連線。amqp命令都是通過通道傳送出去的。

為什麼不直接通過tcp連線傳送amqp命令呢?

主要原因是對作業系統建立和銷毀tcp會話是非常昂貴的開銷

執行緒啟動後,會在現成的連線上建立一條通道,也就獲得了連線到rabbit上的私密通訊路徑,而不會給作業系統的tcp棧造成額外負擔

2.2 從底部開始構造:佇列

amqp訊息路由必須有三部分:交換器、佇列和繫結,生產者把訊息發布到交換機上,訊息最終到達佇列,並被消費者接收;繫結決定了訊息如何從路由器路由到特定的佇列

消費者通過以下兩種方式從特定的佇列中接收訊息

1 通過amqp的basic.consume命令訂閱

2 某些時候,你只想從佇列中獲得單條訊息而不是持續訂閱 basic.get

沒有消費者訂閱的時候,訊息會在佇列中等待,擁有多個消費者的時候,佇列收到的訊息將以迴圈的方式傳送給消費者,每條訊息只會傳送給乙個訂閱的消費者

消費者接收到的每一條訊息都必須進行確認。消費者必須通過amqp的basic.ack命令顯示的向rabbitmq傳送了乙個確認,如果設定了auto_ack時,一旦消費者接收訊息,rabbitmq會認為自動確認了訊息。

佇列是amqp訊息通訊的基礎模組

1 為訊息提供了處所,訊息在此等待消費

2 對負載均衡來說,佇列是絕佳方案

3 佇列是rabbit中訊息的最後的終點

RabbitMQ (2) 理解訊息通訊

訊息包含兩部分 有效載荷 payload 和標籤 label 通道是建立在 真實的 tcp連線內的虛擬連線,amqp命令是通過通道傳送出去的 消費者通過以下兩種方式從特定的佇列中接收訊息 a.通過amqp的basic.consume命令訂閱 b.basic.get 確認a.basic.ack 顯示的...

RabbitMQ實戰 理解訊息通訊

前段時間總結完了 深入淺出mybatis 系列,對mybatis有了更全面和深入的了解,在掘金社群也收到了一些博友的喜歡,很高興。另外,短暫的陪產假就要結束了,小寶也二周了,下周二就要投入工作了,希望自己盡快調整過來,加油努力。從本篇開始總結 rabbitmq實戰 系列的閱讀筆記,rabbitmq是...

RabbitMQ實戰 理解訊息通訊

rabbitmq是乙個開源的訊息 和佇列伺服器,可以通過基本協議在完全不同的應用之間共享資料,可以將作業排隊以便讓分布式服務進行處理。本篇介紹下訊息通訊,首先介紹基礎概念,將這些概念對映到amqp協議,然後介紹訊息持久化 傳送方確認模式等訊息可靠性保證。通過本篇介紹,你會了解到 訊息通訊概念 此部分...