tp8 使用rabbitMQ(2)工作隊列

代碼的參數說明在 第一小節的代碼中,如果需要可移步到第一節中查看

工作隊列

在這里插入圖片描述
工作隊列(又稱:任務隊列——Task Queues)是為了避免等待一些占用大量資源、時間的操作。當我們把任務(Task)當作消息發送到隊列中,一個運行在后臺的工作者(worker)進程就會取出任務然后處理。當你運行多個工作者(workers),任務就會在它們之間共享。
使用工作隊列的一個好處就是它能夠并行的處理隊列。如果堆積了很多任務,我們只需要添加更多的工作者(workers)就可以了,擴展很簡單。
當我們在 n個Terminal 窗口中,運行消費者程序,就可以有多個消費者處理生產者生產的消息了 當隊列中的消息發送給消費者1的時候,就不會再發送給消費者2了。

消息確認

當我們處理消息的時候, 我們想知道,消費者在處理的過程中是否已經處理完成,沒有出現消費者掛機的狀態,這里就需要消息確認了, 不然隊列中的消息是否處理完成,不能明確, 有可能會丟失重要的數據。
消息響應默認是開啟的。之前的例子中我們可以使用no_ack=True標識把它關閉。是時候設置的第四個參數basic_consume為false (true 意味著不響應ack) ,當工作者(worker)完成了任務,就發送一個響應。

公平調度

RabbitMQ只管分發進入隊列的消息,不會關心有多少消費者(consumer)沒有作出響應。它盲目的把第n-th條消息發給第n-th個消費者。 不會等侍是否處理完成
我們可以使用basic.qos方法,并設置prefetch_count=1。這樣是告訴RabbitMQ,再同一時刻,不要發送超過1條消息給一個工作者(worker),直到它已經處理了上一條消息并且作出了響應。這樣,RabbitMQ就會把消息分發給下一個空閑的工作者(worker)。

$channel->basic_qos(null, 1, null);

生產者

使用了 第一小節中的生產者,一次生成了20個消息

消費者

<?php
declare (strict_types = 1);namespace app\command;use Exception;
use PhpAmqpLib\Connection\AMQPStreamConnection;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;//工作隊列帶消息確認的 開幾個終端,就會有幾個消息者來消費。
//生產者可以使用 SimpleMQProduce 中的生產者
class WorkerWithAck extends Command
{protected function configure(){// 指令配置$this->setName('workerwithack')->setDescription('這是一個工作隊列,帶應答的');}protected function execute(Input $input, Output $output){//獲取連接$connection = $this->getConnection();//獲取通道$channel = $connection->channel();$channel->queue_declare("hello",false,false,false,false,false);$callback = function($msg){$msgbody = $msg->body;$msgbydyArr = json_decode($msgbody,true);echo $msgbydyArr["name"]."--".$msgbydyArr["age"]."--".$msgbydyArr["sex"].PHP_EOL;$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);   //這里讓就是消息的應答了};//如果我們要讓消費者一條一條的處理消費,也就是說 只有consumer已經處理并確認了上一條message時queue才分派新的message給它//我們可以加上下面的這個代碼, 注意,是可以加,也可以不加。因為我們有了應答機制,消息是不會丟失的//$channel->basic_qos(null,1,null);  //這句可加可不加$channel->basic_consume("hello","",false,false,false,false,$callback);while(count($channel->callbacks)){$channel->wait();}}protected function getConnection(){try{return new AMQPStreamConnection("192.168.3.228",5672,"admin","123456");}catch(Exception $e){throw new \Exception("創建隊列連接失敗");}}}

測試結果,兩個 工作隊列分別處理了,同一個生產者的數據,并且沒有重復
在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163472.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163472.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163472.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

推薦一款png圖片打包plist工具pngPackerGUI_V2.0

png圖片打包plist工具&#xff0c;手把手教你使用pngPackerGUI_V2.0 此軟件是在pngpacker_V1.1軟件基礎之后&#xff0c;開發的界面化操作軟件&#xff0c;方便不太懂命令行的小白快捷上手使用。1.下載并解壓縮軟件&#xff0c;得到如下目錄&#xff0c;雙擊打開 pngPackerGUI.…

《第一行代碼:Android》第三版-2.4.3循環語句 for循環

本節主要講for 循環&#xff0c;主要就是創建個區間&#xff0c;然后用for 來遍歷。 /*** You can edit, run, and share this code.* play.kotlinlang.org*/fun main() {println("Hello, world!!!")for(i in 1..10)//表示 0 到10 但是包括10 &#xff0c;即數學上的…

使用paddleocr進行OCR文字識別

1 OCR介紹 OCR&#xff08;Optical Character Recognition&#xff09;即光學字符識別&#xff0c;是一種將不同類型的文檔&#xff08;如掃描的紙質文件、PDF文件或圖像文件中的文本&#xff09;轉換成可編輯和可搜索的數據的技術。OCR技術能夠識別和轉換印刷或手寫文字&…

Python接口自動化測試——如何搭建測試環境

前言 接口測試的方式有很多&#xff0c;比如可以用工具&#xff08;jmeter,postman&#xff09;之類&#xff0c;也可以自己寫代碼進行接口測試&#xff0c;工具的使用相對來說都比較簡單&#xff0c;重點是要搞清楚項目接口的協議是什么&#xff0c;然后有針對性的進行選擇&a…

NF是哪個國家品牌?韓國NF-耐福功放芯片介紹

NF是韓國一家專注于數字音頻芯片領域公司旗下的數字功放IC品牌&#xff0c;2008年開始進入中國市場&#xff0c;ISweek工采網作為其代理商&#xff1b;在國內簡稱&#xff1a;韓國NF&#xff0c;又被稱耐福、耐福NTP功放芯片&#xff1b;國內長虹、TCL、海信、小豹AI音箱、騰訊…

大數據-之LibrA數據庫系統告警處理(ALM-37001 MPPDBServer實例Redo日志缺失)

告警解釋 當DN主實例有未同步到DN備實例的xlog日志被刪除時&#xff0c;產生該告警。 告警屬性 告警ID 告警級別 可自動清除 37001 嚴重 是 告警參數 參數名稱 參數含義 ServiceName 產生告警的服務名稱 RoleName 產生告警的角色名稱 HostName 產生告警的主機名…

shell從服務列表中讀取參數并檢查服務

一、shell腳本 #!/usr/bin/env bash# 讀取文檔數據 while read -r line do# 提取服務名和命令service_name$(echo "$line" | awk {print $1})command$(echo "$line" | awk {$1""; print substr($0,2)})#echo "服務名: $service_name"…

SQL進階學習

1.[NISACTF 2022]join-us sql報錯注入和聯合注入 過濾&#xff1a; as IF rand() LEFT by updatesubstring handler union floor benchmark COLUMN UPDATE & sys.schema_auto_increment_columns && 11 database case AND right CAST FLOOR left updatexml DATABA…

Vue3入門組合式 API

Vue3 學習 開發環境 tong ~/Projects/EasyVue3 $ node -v v16.20.1 tong ~/Projects/EasyVue3 $ sw_vers ProductName: macOS ProductVersion: 14.1.1 BuildVersion: 23B81 tong ~/Projects/EasyVue3 $ npm --version 8.19.4 tong ~/Projects/Ea…

selenium 簡單案例 <批量下載文件> <網頁自動化點擊上報>

一、批量下載文件 網頁分析 點擊跳轉到下載頁面 from selenium import webdriver import timedef get_link_list():# 創建瀏覽器對象driver webdriver.Chrome(executable_pathrC:\Users\nlp_1\Desktop\chromedriver\chromedriver-win32\chromedriver.exe)url https://www…

微信報名怎么做_輕松便捷的數字化報名體驗

微信報名&#xff1a;輕松便捷的數字化報名體驗 在這個數字化時代&#xff0c;微信已經成為我們生活中不可或缺的一部分。它不僅僅是一個社交平臺&#xff0c;更是一個功能強大的綜合性工具。其中&#xff0c;微信報名功能更是給我們的生活帶來了極大的便利。本文將詳細介紹微…

Django之cookie和session

文章目錄 Cookie的介紹Cookie的由來什么是CookieCookie原理Cookie覆蓋瀏覽器查看Cookie 在Django中操作Cookie設置Cookie查詢瀏覽器攜帶的Cookie刪除Cookie Cookie校驗登錄sessionSession的由來Session設置查看、更新Session值刪除Session值Seesion的其他方法Session的其他配置…

企業微信機器人:自動化辦公的未來已來!

導語&#xff1a;隨著科技的迅速發展&#xff0c;人工智能已經逐漸滲透到我們的日常生活和工作中。而企業微信機器人的出現&#xff0c;更是開啟了自動化辦公的新紀元。本文將為您詳細解析企業微信機器人的功能、優勢以及如何為企業帶來實質性的價值。 一、企業微信機器人的功…

擴展外部eMMC存儲

By Toradex胡珊逢 簡介 存儲器的嵌入式設備中扮演著重要角色&#xff0c;上面不僅安裝有操作系統&#xff0c;同時也保存著應用程序和運行日志等。對于存儲器如 eMMC&#xff0c;寫入的數據量決定其使用壽命&#xff0c;對于有大量日志記錄的應用&#xff0c;通常可以選用一個…

JavaScript:監聽事件

該方法用于向瀏覽器窗口注冊事件監聽器&#xff0c;當指定的事件&#xff08;如單擊、按鍵按下&#xff09;被觸發時&#xff0c;瀏覽器會自動調用指定的函數&#xff08;回調函數&#xff09;。 window.addEventListener(event, function, useCapture); 參數說明&#xff1a…

洛谷題單--線性表

P3156 【深基15.例1】詢問學號 鏈接 : 【深基15.例1】詢問學號 - 洛谷 直接輸入&#xff0c;然后輸出a[i]即可; 代碼 : #include<iostream> #include<cstring> #include<algorithm> #include<vector> using namespace std; int main(){int n, q …

請手寫一個發布-訂閱的模式

發布-訂閱模式也是經典的設計模式之一&#xff0c;它在前端很多地方都有應用&#xff0c;比如javascript事件池&#xff0c;Vue的$on、$off&#xff0c;nodejs的events模塊和socket通信等等都有應用&#xff0c;也是前端面試比較火熱的考點之一&#xff0c;接下來給大家詳細介紹…

cefsharp119.4.30(cef119.4.3,Chromium119.0.6045.159)版本升級體驗支持H264及其他多個H264版本

Cefsharp119.4.30,cef119.4.3,Chromium119.0.6045.159 此更新包括一個高優先級安全更新 This update includes a high priority security update. 說明:此版本119.4.3支持H264視頻播放(需要聯系我),其他版本。.NETFramework 4.6.2 NuGet Gallery | CefSharp.WinForms 119.…

運動規劃Motion-Planning隨筆

online verification技術 實時安全校驗技術&#xff1a;留一手 首先計算能否通過剎車這種方式得到一條安全軌跡&#xff0c;&#xff08;讓速不讓道&#xff09;&#xff0c;當剎車有可能碰撞到行人或其他車輛時&#xff0c;則判斷變道是否會產生碰撞。如果能變道&#xff0…

深度學習之七(深度信念網絡和受限玻爾茲曼機器)

概念 深度信念網絡(Deep Belief Networks,DBN)和受限玻爾茲曼機器(Restricted Boltzmann Machines,RBMs)都是無監督學習的模型,通常用于特征學習、降維和生成數據。 受限玻爾茲曼機器(RBM): 結構: RBM 是一個兩層神經網絡,包括一個可見層和一個隱藏層。這兩層之間…