RabbitMQ 入门 DEMO - 基于 PHP AMQPlib

通过 composer 安装 PHP AMQPlib

composer require php-amqplib/php-amqplib

目录结构:

├─rabbitmq
└─vendor
    ├─composer
    ├─php-amqplib
    │  └─php-amqplib
    │      └─PhpAmqpLib
    │          ├─Channel
    │          ├─Connection
    │          │  └─Heartbeat
    │          ├─Exception
    │          ├─Exchange
    │          ├─Helper
    │          │  └─Protocol
    │          ├─Message
    │          └─Wire
    │              └─IO
    └─phpseclib
        └─phpseclib
            └─phpseclib
                ├─Crypt
                ├─File
                │  └─ASN1
                ├─Math
                ├─Net
                │  └─SFTP
                └─System
                    └─SSH
                        └─Agent

生产者和消费者demo

生产者

<?php

require "../vendor/autoload.php";

use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

if ($argc < 2) {
	exit("please input argument, like `php -f directP.php mystring`");
}

$conn = new AMQPStreamConnection('127.0.0.1', '5672', 'guest', 'guest', '/');
if (!$conn->isConnected()) {
	exit("connect err...");
}
$channel = $conn->channel();

$properties = [
	'content_type' => 'text/plain',
	'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT
];
$channel->basic_publish(new AMQPMessage($argv[1], $properties), "myExchange", "my", true);

$channel->close();
$conn->close();

消费者

<?php

require "../vendor/autoload.php";

use PhpAmqpLib\Connection\AMQPStreamConnection;

$conn = new AMQPStreamConnection('127.0.0.1', '5672', 'guest', 'guest', '/');
if (!$conn->isConnected()) {
	exit("connect err...");
}
$channel = $conn->channel();


$callback = function($msg) {
    $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag'], false); // default ack this msg
    echo $msg->body . PHP_EOL;
	if ($msg->body == 'quit') {
		exit('quit now...');
	}
    file_put_contents('./test.txt', json_encode($msg));
    return true;
};


$channel->basic_consume('myQueue', '', false, false, false, false, $callback);

while(count($channel->callbacks)) {
	$channel->wait();
}


$channel->close();
$conn->close();

测试

开启消费者:

php -f directC.php

生产消息:

php -f directP.php "hello world"

此时可以在消费者终端看到消息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值