php操作RabbitMQ消息队列
-
使用之前:使用rabbitmq,前提肯定需要安装erlang以及rabbitmq;
-
php使用rabbitmq需要安装客户端,下载 http://pecl.php.net/package/amqp/1.9.4/windows
-
找到使用自已的版本,然后的php版本的rabbitmq客户端,放置在php根目录的ext文件,rabbitmq.4.dll则放置
在,php的根目录; -
Queue
指具体某一个队列 -
RouteKey
路由和交换机在进行绑定时,定义一个路由名 -
Exchange
交换机,用于把生产者的消息根据不同工作方式分发到不同队列中. -
Publish
消息发送者 -
Consume
消息接收者 -
Message
消息本身
六种工作模式
简单模式:一个生产者,一个消费者
work模式:一个生产者,多个消费者,每个消费者获取到的消息唯一。
订阅模式:一个生产者发送的消息会被多个消费者获取。
路由模式:发送消息到交换机并且要指定路由key ,消费者将队列绑定到交换机时需要指定路由key
topic模式:将路由键和某模式进行匹配,此时队列需要绑定在一个模式上,“#”匹配一个词或多个词,“*”只匹配一个词。
生产者
$exchangeName = 'product_exchange'; //交换器名称
$queueName = 'createProduct'; //队列名称
$routeKey = 'self_define_routing_key'; //RouteKey
try {
$conn_args = array('host' => 'localhost', 'port' => '5672','vhost'=>'/', 'login' => 'guest', 'password' => 'guest');
$conn = new AMQPConnection($conn_args);//连接mq
$conn->connect();
//通过mq连接创建通道
$channel = new AMQPChannel($conn);
//通过信道创建交换机对象
$exchange = new AMQPExchange($channel);
//设置交换器名称
$exchange->setName($exchangeName);
//设置交换机类型
$exchange->setType(AMQP_EX_TYPE_DIRECT);
//声明交换机
$exchange->declareExchange();
$data = ['id', 'name'=>"测试数据"];
$data = json_encode($data);
//发布消息
$exchange->publish($data,$routeKey);
}catch (\Exception $exception) {
exit($exception->getMessage());
}
消费者
$exchangeName = 'product_exchange'; //交换器名称
$queueName = 'createProduct'; //队列名称
$routeKey = 'self_define_routing_key'; //RouteKey
$conn_args = array('host' => 'localhost', 'vhost' => '/', 'port' => '5672', 'login' => 'guest', 'password' => 'guest');
$conn = new AMQPConnection($conn_args);//连接mq
$conn->connect();
// 通过mq连接创建信道
$channel = new AMQPChannel($conn);
// 通过信道创建交换器对象
$exchange = new AMQPExchange($channel);
// 设置交换器名称
$exchange->setName($exchangeName);
// 声明自己监听哪个队列
$queue = new AMQPQueue($channel);
$queue->setName($queueName);
$queue->declareQueue();
//绑定监听
$queue->bind($exchangeName,$routeKey);
$queue->consume(function ($envelope, $queue) {
$data = $envelope->getBody();
//回应
var_dump($data);
$queue->ack($envelope->getDeliveryTag());
});//阻塞监听
- 命令行先执行消费者,在执行生产者;