最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用PHP和RabbitMQ實(shí)現(xiàn)消息隊(duì)列功能

 更新時(shí)間:2024年03月24日 10:44:10   作者:ayzen1988  
這篇文章主要介紹了如何使用PHP和RabbitMQ實(shí)現(xiàn)消息隊(duì)列功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用PHP具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

今天我們來(lái)做個(gè)小試驗(yàn),用PHP和RabbitMQ實(shí)現(xiàn)消息隊(duì)列功能。

前期準(zhǔn)備,需要安裝好docker、docker-compose的運(yùn)行環(huán)境。

使用docker部署php服務(wù)的詳細(xì)步驟_docker_腳本之家 (jb51.net)

一、安裝RabbitMQ

1、創(chuàng)建相關(guān)目錄,執(zhí)行如下命令。

mkdir -p /docker/rabbitmq/data
cd /docker/rabbitmq

2、編寫(xiě)yaml文件,內(nèi)容如下;version替換成自己的docker-compose版本。

vim docker-compose.yaml
version: '2.2.2'
services:
  rabbitmq:
    image: rabbitmq
    hostname: rabbitmq
    container_name: rabbitmq
    ports:
      - "5672:5672"
      - "15672:15672"
    volumes:
      - ./data:/var/lib/rabbitmq
    networks:
      - mynet
 
networks:
  mynet:
    name: mynet
    driver: bridge

3、啟動(dòng)rabbitmq,執(zhí)行如下命令。

docker-compose up -d

4、檢查服務(wù)是否正常運(yùn)行,執(zhí)行如下命令。

docker-compose ps -a

返回如下內(nèi)容,說(shuō)明服務(wù)已正常啟動(dòng),正在運(yùn)行。

5、如果有服務(wù)啟動(dòng)失敗,可以使用如下命令排查問(wèn)題。

docker logs rabbitmq

6、至此,rabbitmq安全完成并且已正常運(yùn)行。

二、安裝PHP的AMQP擴(kuò)展

1、進(jìn)入test1項(xiàng)目容器,執(zhí)行如下命令。

docker exec -ti test1 /bin/sh

2、下載AMQP擴(kuò)展并且完成安裝,執(zhí)行如下命令。

wget https://pecl.php.net/get/amqp-2.1.2.tgz
tar -zxvf amqp-2.1.2.tgz
cd amqp-2.1.2
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

3、修改php.ini配置,增加amqp擴(kuò)展,內(nèi)容如下。

extension=amqp.so

4、檢查配置是否成功,執(zhí)行如下命令,有返回說(shuō)明已完成安裝。

/usr/local/php/bin/php -m|grep amqp

5、重啟PHP服務(wù), 重啟Web服務(wù)器或PHP-FPM服務(wù)以加載新安裝的AMQP擴(kuò)展。

6、至此,php的amqp擴(kuò)展已完成安裝。

三、測(cè)試驗(yàn)證

1、進(jìn)入test1項(xiàng)目目錄,執(zhí)行如下命令。

cd /docker/test1/html/

2、編寫(xiě)生產(chǎn)者,代碼內(nèi)容如下。

vim producer.php
<?php
// 創(chuàng)建連接到RabbitMQ服務(wù)器的連接
$connection = new AMQPConnection(
    [
        'host' => 'rabbitmq',
        'port' => 5672,
        'username' => 'guest',
        'password' => 'guest'
    ]
);
$connection->connect();
 
// 創(chuàng)建一個(gè)頻道(channel)
$channel = new AMQPChannel($connection);
 
// 聲明一個(gè)交換機(jī)(exchange)
$exchange = new AMQPExchange($channel);
$exchange->setName('exchange_name');
$exchange->setType(AMQP_EX_TYPE_DIRECT); // 直接交換機(jī)類型
$exchange->declareExchange();
 
// 聲明一個(gè)隊(duì)列
$queue = new AMQPQueue($channel);
$queue->setName('queue_name');
$queue->declareQueue();
 
// 綁定交換機(jī)到隊(duì)列
$queue->bind('exchange_name', 'routing_key');
 
// 發(fā)送一條消息
$messageBody = 'Hello, RabbitMQ!'.(!empty($_GET['msg']) ? $_GET['msg'] : '');
$exchange->publish($messageBody, 'routing_key');
 
// 關(guān)閉連接
$channel->close();
$connection->disconnect();

3、編寫(xiě)消費(fèi)者,代碼內(nèi)容如下。

vim consumer.php
<?php
// 創(chuàng)建連接到RabbitMQ服務(wù)器的連接
$connection = new AMQPConnection(
    [
        'host' => 'rabbitmq',
        'port' => 5672,
        'username' => 'guest',
        'password' => 'guest'
    ]
);
$connection->connect();
 
// 創(chuàng)建一個(gè)頻道(channel)
$channel = new AMQPChannel($connection);
 
// 聲明一個(gè)交換機(jī)(exchange)
$exchange = new AMQPExchange($channel);
$exchange->setName('exchange_name');
$exchange->setType(AMQP_EX_TYPE_DIRECT); // 直接交換機(jī)類型
$exchange->declareExchange();
 
// 聲明一個(gè)隊(duì)列
$queue = new AMQPQueue($channel);
$queue->setName('queue_name');
$queue->declareQueue();
 
// 綁定交換機(jī)到隊(duì)列
$queue->bind('exchange_name', 'routing_key');
 
// 開(kāi)始消費(fèi)消息
$queue->consume(function (AMQPEnvelope $envelope, AMQPQueue $queue) {
    if ($envelope->getBody()) {
        echo "Received message: ", $envelope->getBody(), "\n";
    }
}, AMQP_AUTOACK); // 如果設(shè)置為AMQP_AUTOACK,消息一旦收到就被認(rèn)為已確認(rèn),否則需要手動(dòng)確認(rèn)
 
// 關(guān)閉連接
$channel->close();
$connection->disconnect();

4、進(jìn)入test1項(xiàng)目容器,監(jiān)控消費(fèi)者,執(zhí)行如下命令。

/usr/local/php/bin/php /usr/local/nginx/html/consumer.php

5、在宿主機(jī)發(fā)起一個(gè)生產(chǎn)者請(qǐng)求,執(zhí)行如下命令。

curl "http://127.0.0.1:8081/producer.php?msg=max"

6、正常情況下,會(huì)在test1項(xiàng)目容器看到消費(fèi)者的輸出,類似如下截圖。

7、至此,php和rabbitmq實(shí)現(xiàn)消息隊(duì)列的功能已測(cè)試驗(yàn)證OK。

總結(jié)

用PHP和RabbitMQ實(shí)現(xiàn)消息隊(duì)列功能,其實(shí)也不復(fù)雜,主要有以下幾個(gè)步驟。

1、安裝RabbitMQ。

2、安裝PHP的AMQP擴(kuò)展。

3、編寫(xiě)生產(chǎn)者、消費(fèi)者進(jìn)行驗(yàn)證。

上面的代碼只是做個(gè)簡(jiǎn)單的示例,如果運(yùn)用到實(shí)際的項(xiàng)目當(dāng)中需要做配置化、封裝。

以上就是使用PHP和RabbitMQ實(shí)現(xiàn)消息隊(duì)列功能的詳細(xì)內(nèi)容,更多關(guān)于PHP RabbitMQ消息隊(duì)列的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • php實(shí)現(xiàn)的簡(jiǎn)單多進(jìn)程服務(wù)器類完整示例

    php實(shí)現(xiàn)的簡(jiǎn)單多進(jìn)程服務(wù)器類完整示例

    這篇文章主要介紹了php實(shí)現(xiàn)的簡(jiǎn)單多進(jìn)程服務(wù)器類,結(jié)合完整實(shí)例形式分析了PHP多進(jìn)程服務(wù)器數(shù)據(jù)傳輸、響應(yīng)、處理等相關(guān)操作技巧,需要的朋友可以參考下
    2020-02-02
  • PHP實(shí)現(xiàn)簡(jiǎn)單注冊(cè)登錄系統(tǒng)

    PHP實(shí)現(xiàn)簡(jiǎn)單注冊(cè)登錄系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了PHP實(shí)現(xiàn)簡(jiǎn)單注冊(cè)登錄系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • php rmdir使用遞歸函數(shù)刪除非空目錄實(shí)例詳解

    php rmdir使用遞歸函數(shù)刪除非空目錄實(shí)例詳解

    我們大家都知道,php rmdir()函數(shù)用于刪除空目錄,但如果要?jiǎng)h除非空目錄,我們必須將非空目錄中的文件或子目錄刪除,本文章向大家介紹php如何使用遞歸函數(shù)刪除非空目錄,需要的朋友可以參考一下
    2016-10-10
  • php中mysql模塊部分功能的簡(jiǎn)單封裝

    php中mysql模塊部分功能的簡(jiǎn)單封裝

    php中mysql模塊部分功能的簡(jiǎn)單封裝,很多cms都是封裝了一些mysql的操作代碼類,大家可以參考下。
    2011-09-09
  • 再談PHP錯(cuò)誤與異常處理

    再談PHP錯(cuò)誤與異常處理

    這篇文章主要介紹了再談PHP錯(cuò)誤與異常處理,對(duì)錯(cuò)誤和異常感興趣的同學(xué),可以參考下
    2021-04-04
  • 深入理解PHP中mt_rand()隨機(jī)數(shù)的安全

    深入理解PHP中mt_rand()隨機(jī)數(shù)的安全

    mt_rand()使用mersennetwister算法返回隨機(jī)整數(shù),這個(gè)大家都知道,但下面這篇文章主要給大家介紹的是關(guān)于PHP中mt_rand()隨機(jī)數(shù)安全的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • php轉(zhuǎn)換顏色為其反色的方法

    php轉(zhuǎn)換顏色為其反色的方法

    這篇文章主要介紹了php轉(zhuǎn)換顏色為其反色的方法,涉及php操作顏色數(shù)值的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • php的4種常用運(yùn)行方式詳解

    php的4種常用運(yùn)行方式詳解

    這篇文章主要介紹了php的4種常用運(yùn)行方式,CGI、FastCGI、APACHE2HANDLER和CLI,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 基于PHP實(shí)現(xiàn)圖片防盜鏈

    基于PHP實(shí)現(xiàn)圖片防盜鏈

    這篇文章主要為大家詳細(xì)介紹了如何基于PHP實(shí)現(xiàn)一個(gè)簡(jiǎn)單的圖片防盜鏈,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • PHP正則匹配日期和時(shí)間(時(shí)間戳轉(zhuǎn)換)的實(shí)例代碼

    PHP正則匹配日期和時(shí)間(時(shí)間戳轉(zhuǎn)換)的實(shí)例代碼

    本文介紹下,用php實(shí)現(xiàn)正則匹配日期與時(shí)間,并進(jìn)行時(shí)間戳轉(zhuǎn)換的例子,有需要的朋友,參考下吧
    2016-12-12

最新評(píng)論

曲阳县| 开鲁县| 文成县| 崇义县| 遂溪县| 阳曲县| 阳新县| 社会| 上思县| 遂昌县| 嫩江县| 元阳县| 铅山县| 舟曲县| 长海县| 镇平县| 望谟县| 陈巴尔虎旗| 临夏县| 神池县| 福建省| 黄梅县| 天长市| 奉新县| 沁阳市| 渑池县| 宕昌县| 永定县| 临潭县| 梅河口市| 同仁县| 启东市| 黑河市| 壤塘县| 昭平县| 莒南县| 大连市| 武城县| 墨竹工卡县| 闻喜县| 拉萨市|