欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

今天我們來做個(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、編寫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、啟動rabbitmq,執(zhí)行如下命令。

docker-compose up -d

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

docker-compose ps -a

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

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

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í)行如下命令,有返回說明已完成安裝。

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

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

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

三、測試驗(yàn)證

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

cd /docker/test1/html/

2、編寫生產(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、編寫消費(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');
 
// 開始消費(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),否則需要手動確認(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)者請求,執(zhí)行如下命令。

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

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

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

總結(jié)

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

1、安裝RabbitMQ。

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

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

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

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

相關(guān)文章

最新評論