1. 程式人生 > >PHP使用Beanstalkd訊息佇列

PHP使用Beanstalkd訊息佇列

Beanstalkd,一個高效能、輕量級的分散式記憶體佇列系統 
安裝參考GitHub:https://github.com/kr/beanstalkd 
啟動Beanstalkd : beanstalkd -l 127.0.0.1 -p 11300

佇列的使用場景:非同步處理、系統解耦、定時處理。

Beanstalk的特性

  1. 優先順序(priority)
  2. 延遲(delay)
  3. 持久化(persistent data)
  4. 預留(buried)
  5. 任務超時重發(time-to-run)

Beanstalk的核心元素

  • 管道(tube)
  • 任務(job) 
    Beanstalk核心元素管道與任務

Beanstalk的任務狀態

  • ready 任務就緒,隨時可以被消費
  • delayed 任務延遲,延遲時間到時進入ready狀態
  • buried 任務預留,此狀態會重新進入ready
  • delete 刪除任務
  • reserved 任務正在消費中,此狀態可以進入delayed、ready、buried、delete

Beanstalk的任務狀態

PHP操作Beanstalkd需要安裝Pheanstalk 
通過composer安裝 composer require pda/pheanstalk

require 'vendor/autoload.php';

use Pheanstalk\Pheanstalk;

$pheanstalk = new Pheanstalk('127.0.0.1','11300');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

通過 new Pheanstalk(host, port)

 可以得到Pheanstalk的例項來操作Beanstalkd

Pheanstalk類常用操作

  • stats() 檢視佇列狀態
  • listTubes() 檢視當前所有管道
  • statsTube(tubeName) 檢視指定管道資訊
  • statsJob(job) 檢視指定任務資訊
  • useTube(tubeName) 指定管道
  • put(Job, [priority]) 新增任務
  • putInTube(tubeName, Job, [priority]) 同useTube和put組合
  • delete(job) 刪除任務
  • watch(tubeName) 設定要監聽的管道,可以同時設定多個
  • reserve([time]) 以阻塞的方式監聽管道,可以設定阻塞時間,不設定預設永久

栗子

選擇demo管道新增一個任務 
然後列印管道狀態

$pheanstalk->useTube('demo')->put("test");
print_r($pheanstalk->statsTube('demo'));
  • 1
  • 2

tube狀態

current-jobs-ready表示當前ready狀態的任務數量,其他current-jobs同理。 
total-jobs 表示當前管道所有任務數量 
current-using 當前有多少個生產者正在使用這個管道(使用useTube累計+1) 
current-watching 當前有多少個消費者正在使用這個管道(使用watch累計+1) 
current-waiting 當前有多少消費者正在等待任務(使用watch阻塞等待中累計+1)

監聽demo管道,列印任務資訊

    $job = $pheanstalk->watch('d$pheanstalk->delete($job);emo')->reserve();
    //一般任務被reserve讀出後,業務處理完成時應及時進行delete操作,防止重新被放回管道
    print_r($pheanstalk->statsJob($job));
    //$pheanstalk->delete($job);
  • 1
  • 2
  • 3
  • 4

Job

id 為當前任務的唯一id 
tube 為當前任務所在的管道 
state 當前任務的狀態 
pri 當前任務的優先順序,預設1024,數字越小優先順序越大 
age 表示當前任務存在秒數 
delay 表示當前任務延遲秒數 
ttr 表示任務超時時間,預設60秒 
time-left 表示當前任務在reserved狀態已經維持了多少秒,超過ttr時間將重新放回管道 
file 如果沒有開啟檔案快取此處數值為0 
reserves 已經被reserves次數

相關推薦

java中JMS訊息佇列初始

1.什麼是訊息佇列:     JMS是一個訊息服務的標準或者說是規範,允許應用程式元件基於JavaEE平臺建立、傳送、接收和讀取訊息。它使分散式通訊耦合度更低,訊息服務更加可靠以及非同步性。 2.JMS基本概念:     JMS是ja

訊息佇列總結

     前言:關於訊息佇列應該大家都不陌生,在實際的專案中訊息佇列也無處不在,今天我和大家分享一下關於訊息佇列的問題。 1、訊息佇列定義 訊息佇列大家又經常稱為MQ(message queue),從字面的含義來看就是一個存放訊息的容器。 2、訊息佇列應用場景 2.1、非

訊息佇列順序

訊息佇列順序 https://www.cnblogs.com/LipeiNet/p/9877189.html 訊息佇列總結 前言:關於訊息佇列應該大家都不陌生,在實際的專案中訊息佇列也無處不在,今天我和大家分享一下關於訊息佇列的問題。 1、訊息佇列定義 訊息佇列大家又經常稱為MQ(message que

初識訊息佇列——WebSphere MQ入門

訊息佇列是什麼 訊息佇列對於我們來說應該並不陌生,訊息佇列(Message Queue,簡稱MQ),首先它是個佇列,先進先出。佇列裡面放的是訊息,訊息則指的是兩個獨立的系統之間傳遞的資料,這兩個系統可以是異構的,可以在不同的作業系統上,只需要寫一段程式碼呼叫一下提供的API既可以傳送

RocketMQ中介軟體訊息佇列在Maven專案中的配置使用操作 (分散式釋出訂閱訊息系統)

一、專案引用 <dependency>     <groupId>com.foriseland.fjf.mq</groupId>     <artifactI

Kafka-API中介軟體MQ訊息佇列在Maven專案中的配置使用操作 (分散式釋出訂閱訊息系統)

一、 Maven依賴 <dependency> <groupId>com.foriseland.fjf.mq</groupId> <artifactId>fjf-mq-kafka</artifactId> &

SpringBoot整合ActiveMQ訊息佇列和雙向佇列、點對點與釋出訂閱

ActiveMQ 是Apache出品,最流行的,能力強勁的開源訊息匯流排。ActiveMQ 是一個完全支援JMS1.1和J2EE 1.4規範的 JMS Provider實現,儘管JMS規範出臺已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演著特殊的地位。 &nbs

Qt應用Redis實現訊息佇列

    類似BS模式,客戶端傳送任務請求給服務端,服務端將處理結果返回給客戶端。 redis負責訊息的儲存和轉發。 模擬病人掛號看病,Patient程序進行掛號,Doctor程序進行看病 ,程式程式碼如下: /////////////

springBoot+ActiveMQ訊息佇列安裝測試

1.ActiveMQ下載安裝(我使用的是5.14.0版本): 下載連結地址: http://activemq.apache.org/activemq-5140-release.html 2.1 Windows平臺MQ啟動(根據自己不同的計算機配置選擇32位或64位): &

java面試—訊息佇列ActiveMQ

1.如何使用ActiveMq解決分散式事物     在應用中,都會有使用者註冊功能:收集使用者錄入資訊,儲存到資料庫—向用戶的手機或郵箱發驗證碼······     在傳統集中式架構,實現功能:開啟一個本地事物,往本地資料庫中插入一條使

滴滴出行基於RocketMQ構建企業級訊息佇列服務的實踐

本文整理自滴滴出行訊息佇列負責人 江海挺 在Apache RocketMQ開發者沙龍北京站的分享。通過本文,您將瞭解到滴滴出行: 在訊息佇列技術選型方面的思考; 為什麼選擇 RocketMQ 作為出行業務的訊息佇列解決方案; 如何構建自己的訊息佇列服務; 在 RocketMQ

訊息佇列之RabbitMQ - 簡介和安裝

       訊息佇列:是簡單的生產者和消費者模式,它的出現是讓各個服務板塊之間解耦和訊息通知。比如,我們一般生成服務板塊中的資料存在有:資料庫,靜態檔案,搜尋系統,hdfs等,那麼如果資料庫中的資料發生了變化,怎麼把這個訊息推送給其他的資料儲存單元呢?如果單

大型網站架構系列:訊息佇列(二)(轉)

本文是大型網站架構系列:訊息佇列(二),主要分享JMS訊息服務,常用訊息中介軟體(Active MQ,Rabbit MQ,Zero MQ,Kafka)。【第二篇的內容大部分為網路資源的整理和彙總,供大家學習總結使用,最後有文章來源】 本次分享大綱 訊息佇列概述(見第一篇:大型網站架構系列:分散式訊息

大型網站架構系列:分散式訊息佇列(一)(轉)

以下是訊息佇列以下的大綱,本文主要介紹訊息佇列概述,訊息佇列應用場景和訊息中介軟體示例(電商,日誌系統)。 本次分享大綱 訊息佇列概述 訊息佇列應用場景 訊息中介軟體示例 JMS訊息服務(見第二篇:大型網站架構系列:分散式訊息佇列(二)) 常用訊息佇列(見第二篇:大型網站架構系列:分

[轉載]使用訊息佇列實現分散式事務-公認較為理想的分散式事務解決方案

前陣子從支付寶轉賬1萬塊錢到餘額寶,這是日常生活的一件普通小事,但作為網際網路研發人員的職業病,我就思考支付寶扣除1萬之後,如果系統掛掉怎麼辦,這時餘額寶賬戶並沒有增加1萬,資料就會出現不一致狀況了。 上述場景在各個型別的系統中都能找到相似影子,比如在電商系統中,當有使用者下單後,除了在訂單表插

hadoop(十四)kafaka訊息佇列

kafka筆記  1/kafka是一個分散式的訊息快取系統 2/kafka叢集中的伺服器都叫做broker 3/kafka有兩類客戶端,一類叫producer(訊息生產者),一類叫做consumer(訊息消費者),客戶端和broker伺服器之間採用tcp協議連線 4/kafka

Beanstalked的初步瞭解和使用(包括利用beanstalkd 秒殺訊息佇列的實現)

一  Beanstalkd 是什麼 Beanstalkd,一個高效能、輕量級的分散式記憶體佇列系統   二  Beanstalkd 特性 1. 優先順序(priority) 注:優先順序就意味 支援任務插隊(數字越小,優先順序越高

基於redis的訊息佇列的設計及實現

訊息佇列 所謂訊息佇列,就是一個以佇列資料結構為基礎的一個真實存在的實體,如陣列,redis中的佇列集合等等,都可以。 為什麼要使用佇列 主要原因是由於在高併發環境下,由於來不及同步處理,請求往往會發生堵塞,比如說,大量的insert,update之類的請求同時到達MySQL,直接導致無

RabbitMQ 訊息佇列之 Exchange Types

寫在前面 RabbitMQ遵循AMQP 0-9-1協議 複製程式碼 AMQP 0-9-1協議簡介 訊息釋出到交換站,這通常被比作郵局或郵箱。然後交換器使用稱為繫結的規則將訊息副本分發到佇列。然後,AMQP代理將訊息傳遞給訂閱佇列的消費者,或者根據需要從佇列中獲取訊息。 釋出訊息時,釋出者可以指定各種

System V訊息佇列實現的檔案伺服器(不跨網路)

可能是定時的部分有問題吧,導致客戶端無法接收資料,不過我感覺思想是沒錯的。。。先pull上吧,以後發現錯誤再改 參考資料:UNP卷二 message.h #ifndef _MESSAGE_H #define _MESSAGE_H #include<stdio.h> #i