php rabbmq教程_RabbitMq-PhpAmqpLib笔记(注:只做笔记-简易手册使用,不做教程)

本文介绍了如何使用PHP和PhpAmqpLib库连接RabbitMQ,创建交换器、队列,实现消息的持久化发布与消费。通过实例展示了direct类型交换器的使用,并演示了基本的队列声明、绑定和消息确认机制。

require

'vendor/autoload.php';

use

PhpAmqpLib\Connection\AMQPStreamConnection;

use

PhpAmqpLib\Message\AMQPMessage;

// __construct(

//  $host, ip

//  $port, 端口号

//  $user, 用户名

//  $password, 密码

//  $vhost = '/', 虚拟主机

//  $insist = false,

//  $login_method = 'AMQPLAIN',

//  $login_response = null,

//  $locale = 'en_US',

//  $connection_timeout = 3.0,

//  $read_write_timeout = 130.0,

//  $context = null,

//  $keepalive = false,

//  $heartbeat = 60,

//  $channel_rpc_timeout = 0.0,

//  $ssl_protocol = null

// )

$connection = new

AMQPStreamConnection('172.18.0.228', 5672, 'test', 'test');

$channel =

$connection->channel();

// exchange_declare(

//  $exchange, 交换器 exchange 名称

//  $type, 交换器类型

//  $passive = false, passive true 只检测不创建 false

创建

//  $durable = false, durable true 为 持久化

//  $auto_delete = true, exclusive 设置true

将会变成私有

//  $internal = false,

//  $nowait = false,

//  $arguments = array(),

//  $ticket = null

// )

$channel->exchange_declare('exchange_name', 'direct', false,

true, false);

// $msg = new AMQPMessage('Hello

World!',[ 'delivery_mode' =>

AMQPMessage::DELIVERY_MODE_PERSISTENT ]);

// fanout 类型交换器 为广播类型

// $channel->basic_publish($msg,

'exchange', 'routing_key');

// queue_declare(

// $queue = '', 队列名称

// $passive = false, passive true

只检测不创建 false 创建

// $durable = false, durable true 为

持久化

// $exclusive = false, exclusive

设置true 将会变成私有

// $auto_delete = true, auto-delete

true 自动删除 最后一个取消订阅就会移除队列

// $nowait = false,

// $arguments = array(),

// $ticket = null

// )

$channel->queue_declare('hello',

false, true, false, false);

//

__construct(

// $body =

'', 消息内容

// $properties = [

// delivery_mode 投递模式  delivery

mode 设置为 2 (AMQPMessage::DELIVERY_MODE_PERSISTENT) 标记持久化

// ]

//

// )

$msg = new AMQPMessage('Hello

World!',[ 'delivery_mode' =>

AMQPMessage::DELIVERY_MODE_PERSISTENT ]);

// basic_publish(

//  $msg, 消息内容

//  $exchange = '', 交换器名称

//  $routing_key = '', 路由键 (routing key)

//  $mandatory = false,

//  $immediate = false,

//  $ticket = null

// )

$channel->basic_publish($msg,

'exchange_name', 'routing_key');

echo " [x] Sent 'Hello

World!'\n";

//关闭信道,关闭amqp

$channel->close();

$connection->close();

require

'vendor/autoload.php';

use

PhpAmqpLib\Connection\AMQPStreamConnection;

// __construct(

//  $host, ip

//  $port, 端口号

//  $user, 用户名

//  $password, 密码

//  $vhost = '/', 虚拟主机

//  $insist = false,

//  $login_method = 'AMQPLAIN',

//  $login_response = null,

//  $locale = 'en_US',

//  $connection_timeout = 3.0,

//  $read_write_timeout = 130.0,

//  $context = null,

//  $keepalive = false,

//  $heartbeat = 60,

//  $channel_rpc_timeout = 0.0,

//  $ssl_protocol = null

// )

$connection = new

AMQPStreamConnection('172.18.0.228', 5672, 'test', 'test');

$channel =

$connection->channel();

// exchange_declare(

//  $exchange, 交换器 exchange 名称

//  $type, 交换器类型

//  $passive = false, passive true 只检测不创建 false

创建

//  $durable = false, durable true 为 持久化

//  $auto_delete = true, exclusive 设置true

将会变成私有

//  $internal = false,

//  $nowait = false,

//  $arguments = array(),

//  $ticket = null

// )

$channel->exchange_declare('exchange_name', 'direct', false,

true, false);

// queue_declare(

// $queue = '', 队列名称

// $passive = false, passive true

只检测不创建 false 创建

// $durable = false, durable true 为

持久化

// $exclusive = false, exclusive

设置true 将会变成私有

// $auto_delete = true, auto-delete

true 自动删除 最后一个取消订阅就会移除队列

// $nowait = false,

// $arguments = array(),

// $ticket = null

// )

list($queue_name, ,) =

$channel->queue_declare("", false, false, true, false);

// queue_bind(

//  $queue, 队列名称

//  $exchange, 交换器 exchange 名称

//  $routing_key = '', 路由键 (routing key)

//  $nowait = false,

//  $arguments = array(),

//  $ticket = null

// )

// fanout 类型交换器 为广播类型

$channel->queue_bind($queue_name,

'exchange',"routing_key");

// queue_declare(

// $queue = '', 队列名称

// $passive = false, passive true

只检测不创建 false 创建

// $durable = false, durable true 为

持久化

// $exclusive = false, exclusive

设置true 将会变成私有

// $auto_delete = true, auto-delete

true 自动删除 最后一个取消订阅就会移除队列

// $nowait = false,

// $arguments = array(),

// $ticket = null

// )

$channel->queue_declare('hello',

false, true, false, false);

echo " [*] Waiting for messages. To

exit press CTRL+C\n";

$callback = function ($msg) {

echo ' [x] Received ',

$msg->body, "\n";

// basic_ack(

// $delivery_tag, 投递标签 delivery mode 投递模式

// $multiple =

false 多个

// )

$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);

};

//

RabbitMQ中的概念,channel.basicQos(1)指该消费者在接收到队列里的消息但没有返回确认结果之前,它不会将新的消息分发给它。

// basic_qos(

// $prefetch_size,

// $prefetch_count,

// $a_global

// )

$channel->basic_qos(null, 1,

null);

// basic_consume(

//  $queue = '', 队列名称

//  $consumer_tag = '',

//  $no_local = false,

//  $no_ack = false, 使用false必须 ack 主动确认消息 成功送达

//  $exclusive = false, exclusive 设置true

将会变成私有

//  $nowait = false,

//  $callback = null, 回调函数

//  $ticket = null,

//  $arguments = array()

// )

$channel->basic_consume('queue_name', '', false, true, false,

false, $callback);

while

(count($channel->callbacks)) {

$channel->wait();

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值