AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不一样产品,不一样的开发语言等条件的限制。Erlang中的实现有 RabbitMQ等。服务器
RabbitMQ,是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现。ui
几个概念说明:spa
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扩展提供了几个类和其中的一系列方法来帮助咱们接受和发送消息code
功能类server
AMQPChannel 一个Connection链接上能够创建多个channel,能够理解为逻辑上的链接
AMQPConnection 指物理的链接,一个client与一个server之间有一个链接
AMQPEnvelope 消息包
AMQPExchange 消息交换机
AMQPQueue 队列中间件
异常类blog
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); //持久化