亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

RabbitMQ中的channel信道、exchange交換機和queue隊列詳解

 更新時間:2023年08月28日 09:04:14   作者:循序0010  
這篇文章主要介紹了RabbitMQ中的channel信道、exchange交換機和queue隊列詳解,connection是指物理的連接,一個client與一個server之間有一個連接,一個連接上可以建立多個channel,可以理解為邏輯上的連接,需要的朋友可以參考下

RabbitMQ中的channel信道、exchange交換機和queue隊列

環(huán)境:

CentOS 7

RabbitMQ Server 版本3.7.9.RELEASE

connection是指物理的連接,一個client與一個server之間有一個連接;一個連接上可以建立多個channel,可以理解為邏輯上的連接。

一般應用的情況下,有一個channel就夠用了,不需要創(chuàng)建更多的channel。

//創(chuàng)建連接和channel
$conn = new AMQPConnection($conn_args);
if (!$conn->connect()) {
die("Cannot connect to the broker!\n");
}
$channel = new AMQPChannel($conn);

exchange 與 routingkey : 交換機 與 路由鍵

為了將不同類型的消息進行區(qū)分,設置了交換機與路由兩個概念。

比如,將A類型的消息發(fā)送到名為‘C1’的交換機,將類型為B的發(fā)送到'C2'的交換機。

當客戶端連接C1處理隊列消息時,取到的就只是A類型消息。

$e_name = 'e_linvo'; //交換機名
$k_route = array(0=> 'key_1', 1=> 'key_2'); //路由key
//創(chuàng)建交換機
$ex = new AMQPExchange($channel);
$ex->setName($e_name);
$ex->setType(AMQP_EX_TYPE_DIRECT); //direct類型
$ex->setFlags(AMQP_DURABLE); //持久化
echo "Exchange Status:".$ex->declare()."\n";
for($i=0; $i<5; ++$i){
echo "Send Message:".$ex->publish($message . date('H:i:s'), $k_route[i%2])."\n";
}

由以上代碼可以看到,發(fā)送消息時,只要有“交換機”就夠了。

至于交換機后面有沒有對應的處理隊列,發(fā)送方是不用管的。routingkey可以是空的字符串(表示發(fā)送到所有的隊列中)。

在示例中,我使用了兩個key交替發(fā)送消息,是為了下面更便于理解routingkey的作用。

交換機設置參數(shù)中有兩個重要的概念:

A,類型。有三種類型: Fanout類型最簡單,這種模型忽略routingkey;Direct類型是使用最多的,使用確定的routingkey。這種模型下,接收消息時綁定'key_1'則只接收key_1的消息;最后一種是Topic,這種模式與Direct類似,但是支持通配符進行匹配,比如: 'key_*',就會接受key_1和key_2。Topic貌似美好,但是有可能導致不嚴謹,所以還是推薦使用Direct。

B,持久化。指定了持久化的交換機,在重新啟動時才能重建,否則需要客戶端重新聲明生成才行。

需要特別明確的概念:

  • 交換機的持久化,并不等于消息的持久化。
  • 只有在持久化隊列中的消息,才能持久化;
  • 如果沒有隊列,消息是沒有地方存儲的;
  • 消息本身在投遞時也有一個持久化標志的,PHP中默認投遞到持久化交換機就是持久的消息,不用特別指定。

queue: 隊列

隊列僅是針對接收方(consumer)的,由接收方根據(jù)需求創(chuàng)建的。

只有隊列創(chuàng)建了,交換機才會將新接受到的消息送到隊列中,交換機是不會在隊列創(chuàng)建之前的消息放進來的。

即在建立隊列之前,發(fā)出的所有消息都被丟棄了。

消息的處理,是有兩種方式:

A,一次性。用 $q->get([...]),不管取到取不到消息都會立即返回,一般情況下使用輪詢處理消息隊列就要用這種方式;

B,阻塞。用 $q->consum( callback, [...] ) 程序會進入持續(xù)偵聽狀態(tài),每收到一個消息就會調用callback指定的函數(shù)一次,直到某個callback函數(shù)返回FALSE才結束。
使用的$routingkey = '', 意味著接收全部的消息。我們可以將其改為 $routingkey = 'key_1',可以看到結果中僅有設置routingkey為key_1的內容了。

注意: routingkey = 'key_1' 與 routingkey = 'key_2' 是兩個不同的隊列。假設: client1 與 client2 都連接到 key_1 的隊列上,一個消息被client1處理之后,就不會被client2處理。而 routingkey = '' 是另類,client_all綁定到 '' 上,將消息全都處理后,client1和client2上也就沒有消息了。

到此這篇關于RabbitMQ中的channel信道、exchange交換機和queue隊列詳解的文章就介紹到這了,更多相關RabbitMQ的channel、exchange和queue內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot實現(xiàn)全局異常的封裝和統(tǒng)一處理

    SpringBoot實現(xiàn)全局異常的封裝和統(tǒng)一處理

    在Spring Boot應用中,全局異常的處理是一個非常重要的方面,本文主要為大家詳細介紹了如何在Spring Boot中進行全局異常的封裝和統(tǒng)一處理,需要的可以參考下
    2023-12-12
  • 一篇文章帶你了解Maven的坐標概念以及依賴管理

    一篇文章帶你了解Maven的坐標概念以及依賴管理

    這篇文章主要為大家介紹了Maven的坐標概念以及依賴管理,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 關于SpringCloud的微服務結構及微服務遠程調用

    關于SpringCloud的微服務結構及微服務遠程調用

    Spring Cloud 是一套完整的微服務解決方案,基于 Spring Boot 框架,準確的說,它不是一個框架,而是一個大的容器,它將市面上較好的微服務框架集成進來,從而簡化了開發(fā)者的代碼量,需要的朋友可以參考下
    2023-05-05
  • java圖形化界面實現(xiàn)簡單混合運算計算器的示例代碼

    java圖形化界面實現(xiàn)簡單混合運算計算器的示例代碼

    這篇文章主要介紹了java圖形化界面實現(xiàn)簡單混合運算計算器的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • IDEA GIT 忽略文件的最佳方式推薦

    IDEA GIT 忽略文件的最佳方式推薦

    這篇文章主要介紹了IDEA GIT 忽略文件的最佳方式推薦,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Java多線程實例

    Java多線程實例

    本文給大家介紹java多線程實例,對java多線程知識感興趣的朋友參考下吧
    2015-11-11
  • JAVA設計模式之解釋器模式詳解

    JAVA設計模式之解釋器模式詳解

    這篇文章主要介紹了JAVA設計模式之解釋器模式詳解,解釋器模式是類的行為模式,給定一個語言之后,解釋器模式可以定義出其文法的一種表示,并同時提供一個解釋器,需要的朋友可以參考下
    2015-04-04
  • List、Map、Set接口在Java中的存取元素特點詳細探討

    List、Map、Set接口在Java中的存取元素特點詳細探討

    在Java編程語言中集合框架是處理對象組的重要工具,主要包括List、Set和Map接口,這些接口及其實現(xiàn)類提供了豐富的功能,這篇文章主要給大家介紹了關于List、Map、Set接口在Java中的存取元素特點,需要的朋友可以參考下
    2024-08-08
  • Java多線程 Callable、Future 和FutureTask

    Java多線程 Callable、Future 和FutureTask

    這篇文章主要介紹Java多線程中的 Callable、Future 以及FutureTask,下面文章圍繞Java多線程的相關資料展開全文詳細內容,需要的朋友可以參考一下
    2021-10-10
  • 手把手教你用Java實現(xiàn)一套簡單的鑒權服務

    手把手教你用Java實現(xiàn)一套簡單的鑒權服務

    現(xiàn)今大部分系統(tǒng)都會有自己的鑒權服務,本文介紹了最常用的鑒權服務,就是日常用戶的登錄登出,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05

最新評論