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); //持久化

 

posted @ 2018-03-25 19:45  DearMrLi  阅读(435)  评论(0编辑  收藏  举报