dreanarc / rabbitmq-adapter
PHP RabbitMQ 适配器
v1.0.0
2023-12-15 17:07 UTC
Requires
- php: ^7.4|^8.0
- php-amqplib/php-amqplib: *
README
您的 RabbitMQ 适配器包的描述。
安装
您可以通过 Composer 安装此包
composer require dreanarc/rabbitmq-adapter
用法/示例
PHP 原生
如果您使用 PHP 原生,请按照以下步骤操作
- 安装 composer
- 创建 PHP 项目目录
- 使用 composer 初始化 PHP 项目
- 通过 composer 安装包
composer require dreanarc/rabbitmq-adapter
- 队列生产者代码示例
require 'vendor/autoload.php'; use Dreanarc\RabbitMQAdapter\RabbitMQProducer; $producer = new RabbitMQProducer( 'localhost', '5672', 'guest', 'guest' ); $data = ""; $producer->sendMessage('queue_name', $data);
- 队列消费者代码示例
require 'vendor/autoload.php'; use Dreanarc\RabbitMQAdapter\RabbitMQConsumer; use PhpAmqpLib\Message\AMQPMessage; $consumer = new RabbitMQConsumer( 'localhost', '5672', 'guest', 'guest' ); $consumer->consume('queue_name', function(AMQPMessage $message){ echo 'Received message: ', $message->getBody(), PHP_EOL; });
Codeigniter 3.x
如果您使用 Codeigniter 3.x,请按照以下步骤操作
-
通过 composer 安装包
composer require dreanarc/rabbitmq-adapter
-
创建配置文件 application\config\rabbitmq.php
<?php defined('BASEPATH') or exit('No direct script access allowed'); $config['rabbitmq_host'] = 'localhost'; $config['rabbitmq_port'] = 5672; $config['rabbitmq_user'] = 'guest'; $config['rabbitmq_password'] = 'guest';
-
请记住在 application\config\autoload.php 中添加 rabbitmq
$autoload['config'] = array('rabbitmq');
-
创建自定义库 application\libraries\Rabbitmq_Adapter.php
<?php use Dreanarc\RabbitMQAdapter\RabbitMQConsumer; use Dreanarc\RabbitMQAdapter\RabbitMQProducer; class Rabbitmq_Adapter { private $config; function __construct() { // Load CodeIgniter config $CI =& get_instance(); $this->config['host'] = $CI->config->item('rabbitmq_host') ?: 'localhost'; $this->config['port'] = $CI->config->item('rabbitmq_port') ?: 5672; $this->config['user']= $CI->config->item('rabbitmq_user') ?: 'guest'; $this->config['password']= $CI->config->item('rabbitmq_password') ?: 'guest'; } function publish_queue($queue_name, $msg){ $producer = new RabbitMQProducer( $this->config['host'], $this->config['port'], $this->config['user'], $this->config['password'] ); try { $producer->sendMessage($queue_name, $msg); return true; } catch (Error $rr) { return false; } } function consume_queue($queue_name, callable $callback){ $consumer = new RabbitMQConsumer( $this->config['host'], $this->config['port'], $this->config['user'], $this->config['password'] ); try { $consumer->consume($queue_name, $callback); } catch (Error $rr) { return false; } } }
-
队列适配器代码示例
<?php use PhpAmqpLib\Message\AMQPMessage; defined('BASEPATH') OR exit('No direct script access allowed'); class Queue extends CI_Controller { function __construct() { parent::__construct(); $this->load->library('Rabbitmq_Adapter', null, 'queue'); } public function publish() { $this->queue->publish_queue('email.notification', 'tes queue'); } public function consumer() { $this->queue->consume_queue('email.notification', function(AMQPMessage $message){ echo 'Received message: ', $message->getBody(), PHP_EOL; }); } }
演示
插入 gif 或链接到演示