php amqp rabbitmq 介绍和使用
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有 RabbitMQ等。
RabbitMQ,是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现。
几个概念说明:
Broker:简单来说就是消息队列服务器实体。 Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。 Queue:消息队列载体,每个消息都会被投入到一个或多个队列。 Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。 Routing Key:路由关键字,exchange根据这个关键字进行消息投递。 vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。 producer:消息生产者,就是投递消息的程序。 consumer:消息消费者,就是接受消息的程序。 channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
消息队列的使用过程大概如下:
(1)客户端连接到消息队列服务器,打开一个channel。 (2)客户端声明一个exchange,并设置相关属性。 (3)客户端声明一个queue,并设置相关属性。 (4)客户端使用routing key,在exchange和queue之间建立好绑定关系。 (5)客户端投递消息到exchange。
(6)exchange接收到消息后,将消息投递到一个或多个队列里
在PHP中,amqp扩展提供了几个类和其中的一系列方法来帮助我们接受和发送消息
功能类
AMQPChannel 一个Connection连接上可以建立多个channel,可以理解为逻辑上的连接
AMQPConnection 指物理的连接,一个client与一个server之间有一个连接
AMQPEnvelope 消息包
AMQPExchange 消息交换机
AMQPQueue 队列
异常类
AMQPException
AMQPQueueException
AMQPConnectionException
AMQPChannelException
AMQPExchangeException
创建连接
1 $connection = new AMQPConnection(array( 2 'host' => 'example.host', 3 'vhost' => '/', 4 'port' => 5763, 5 'login' => 'user', 6 'password' => 'password' 7 ));
创建channel
1 $channel = new AMQPChannel($connection);
创建交换机
1 $exchange = new AMQPExchange($channel); 2 $exchange->setName($e_name); 3 $exchange->setType(AMQP_EX_TYPE_DIRECT); //direct类型 4 $exchange->setFlags(AMQP_DURABLE); //持久化
for remember