RabbitMQ 在 PHP 下的简单使用 (一) -- 安装 AMQP 扩展和 Direct Exchange 模式

Windows 安装 amqp 扩展

RabbitMQ 是基于 amqp(高级消息队列协议) 协议的。使用 RabbitMQ 前必须为 PHP 安装相应的 amqp 扩展。

  1. 下载相应版本的 amqp 扩展:http://pecl.php.net/package/amqp,解压缩文件。
  2. 将 php_amqp.dll 复制到 php 的扩展目录 ext 下,修改配置文件 php.ini:

    [amqp]
    extension=php_amqp.dll
  3. 将 rabbitmq.*.dll 文件复制到 php 的安装目录下,然后修改 Apache 配置文件 httpd.conf:

    #[rabbitmq]
    LoadFile "F:\wamp64\bin\php\php7.0.10\rabbitmq.*.dll"
  4. 重启服务器,查看 phpinfo,确认扩展信息。

Direct Exchange 模式

Direct Exchange 模式的交换机适合用于消息的单播发送. 交换机根据推送消息时的 routing key 和 队列的 routing key 判断消息应该推送到哪个队列. 可以实现同一交换机上的消息, 根据 routing key 推送到不同的队列中.

默认 Direct Exchange

此种模式下,使用 RabbitMQ 的默认 Exchange 即可,默认的 Exchange 是 Direct 模式。使用默认 Exchange 时,不需要对 Exchange 进行属性设置和声明,也不需要对 Queue 进行显示绑定和设置 routing key。Queue 默认会绑定到默认 Exchange,以及默认 routing key 与 Queue 的名称相同。

producer.php:

  1. 创建连接并发起连接
  2. 在连接上创建通道
  3. 在通道上获取默认交换机
  4. 向交换机发送消息
 1 header(‘Content-Type: text/html; charset=utf-8‘);
 2 // 连接设置
 3 $conConfig = [
 4   ‘host‘ => ‘127.0.0.1‘,
 5   ‘port‘ => 5672,
 6   ‘login‘ => ‘root‘,
 7   ‘password‘ => ‘root‘,
 8   ‘vhost‘ => ‘/‘
 9 ];
10 try
11 {
12   // RabbitMQ 连接实例
13   $con = new AMQPConnection($conConfig);
14   // 发起连接
15   $con->connect();
16   // 判断连接是否仍然有效
17   if(!$con->isConnected())
18   {
19     echo ‘连接失败‘;die;
20   }
21   // 新建通道
22   $channel = new AMQPChannel($con);
23   // 使用RabbitMQ的默认Exchange
24   $exchange = new AMQPExchange($channel);
25   for($i = 1; $i < 6; $i++)
26   {
27     $message = [
28       ‘name‘ => ‘默认交换机,消息-‘ . $i,
29       ‘info‘ => ‘Hello World!‘
30     ];
31     // 发送消息,为消息指定routing key,成功返回true,失败false
32     $state = $exchange->publish(json_encode($message, JSON_UNESCAPED_UNICODE), ‘test.queue1‘);
33     if($state)
34     {
35       echo ‘Success‘ . PHP_EOL;
36     }else
37     {
38       echo ‘Fail‘ . PHP_EOL;
39     }
40   }
41   // 关闭连接
42   $con->disconnect();
43 }catch(Exception $e)
44 {
45   echo $e->getMessage();
46 }

consumer.php:

  1. 创建连接并发起连接
  2. 在连接上创建通道
  3. 在通道上创建队列并声明队列
  4. 从队列获取消息
 1 header(‘Content-Type: text/html; charset=utf-8‘);
 2 $conConfig = [
 3   ‘host‘ => ‘127.0.0.1‘,
 4   ‘port‘ => 5672,
 5   ‘login‘ => ‘root‘,
 6   ‘password‘ => ‘root‘,
 7   ‘vhost‘ => ‘/‘
 8 ];
 9
10
11 try
12 {
13   $con = new AMQPConnection($conConfig);
14   $con->connect();
15   if(!$con->isConnected())
16   {
17     echo ‘连接失败‘;die;
18   }
19
20
21   $channel = new AMQPChannel($con);
22
23
24   $queue = new AMQPQueue($channel);
25   $queue->setName(‘test.queue1‘);
26   // 声明队列,不需要对Queue进行显示绑定到交换机和指定Queue的routing key
27   $queue->declareQueue();
28   $queue->consume(function($envelope, $queue)
29   {
30     echo $envelope->getBody() . PHP_EOL;
31   }, AMQP_AUTOACK);
32
33
34   $con->disconnect();
35 }catch(Exception $e)
36 {
37   echo $e->getMessage();
38 }

自定义 Direct Exchange

producer:

header(‘Content-Type: text/html; charset=utf-8‘);
// 连接设置
$conConfig = [
  ‘host‘ => ‘127.0.0.1‘,
  ‘port‘ => 5672,
  ‘login‘ => ‘root‘,
  ‘password‘ => ‘root‘,
  ‘vhost‘ => ‘/‘
];
try
{
  // RabbitMQ 连接实例
  $con = new AMQPConnection($conConfig);
  // 发起连接
  $con->connect();
  // 判断连接结果,true成功,false失败
  if(!$con->isConnected())
  {
    echo ‘连接失败‘;die;
  }
  // 新建通道
  $channel = new AMQPChannel($con);
  // 新建交换机
  $exchange = new AMQPExchange($channel);
  // 交换机名称
  $exchange->setName(‘test.direct‘);
  // 交换机类型
  $exchange->setType(‘direct‘);
  // 声明交换机
  $exchange->declareExchange();
  for($i = 1; $i < 6; $i++)
  {
    $message = [
      ‘name‘ => ‘direct交换机,消息-‘ . $i,
      ‘info‘ => ‘Hello World!‘
    ];
    // 发送消息,同时为消息指定routing key,成功返回true,失败false
    $state = $exchange->publish(json_encode($message, JSON_UNESCAPED_UNICODE), ‘test.queue1‘);
    if($state)
    {
      echo ‘Success‘ . PHP_EOL;
    }else
    {
      echo ‘Fail‘ . PHP_EOL;
    }
  }

  // 关闭连接
  $con->disconnect();
}catch(Exception $e)
{
  echo $e->getMessage();
}

consumer:

 1 header(‘Content-Type: text/html; charset=utf-8‘);
 2 $conConfig = [
 3   ‘host‘ => ‘127.0.0.1‘,
 4   ‘port‘ => 5672,
 5   ‘login‘ => ‘root‘,
 6   ‘password‘ => ‘root‘,
 7   ‘vhost‘ => ‘/‘
 8 ];
 9
10
11 try
12 {
13   $con = new AMQPConnection($conConfig);
14   $con->connect();
15   if(!$con->isConnected())
16   {
17     echo ‘连接失败‘;die;
18   }
19
20   $channel = new AMQPChannel($con);
21
22   $exchange =new AMQPExchange($channel);
23   $exchange->setName("test.direct");
24   $exchange->setType(‘direct‘);
25   $exchange->setFlags(AMQP_DURABLE);
26   $exchange->declareExchange();
27
28
29   $queue = new AMQPQueue($channel);
30   $queue->setName(‘test.queue1‘);
31   // 声明队列,不需要对Queue进行显示绑定到交换机和指定Queue的routing key
32   $queue->declareQueue();
33   // 绑定队列到指定交换机,并指定routing key,即分发规则,消息的routing key与队列的绑定routing key匹配时才。routing key可以使用正则表达式
34   $queue->bind(‘test.direct‘, ‘/^q.*/‘);
35   $queue->consume(function($envelope, $queue)
36   {
37     echo $envelope->getBody() . PHP_EOL;
38   }, AMQP_AUTOACK);
39
40
41   $con->disconnect();
42 }catch(Exception $e)
43 {
44   echo $e->getMessage();
45 }

原文地址:https://www.cnblogs.com/fxyy/p/10540414.html

时间: 2024-07-31 02:02:05

RabbitMQ 在 PHP 下的简单使用 (一) -- 安装 AMQP 扩展和 Direct Exchange 模式的相关文章

IIS7(Windows7)下最简单最强安装多版本PHP支持环境

IIS7(Windows7)下最简单最强安装多版本PHP支持环境 来源自:http://www.myhack58.com/Article/sort099/sort0100/2012/35593.htm 最近调试程序,要在PHP5.2和5.3之间换来换去,而习惯了windows下的开发,就琢磨怎么在iis下安装多版本支持,赫然发现其实微软都为我们准备了好工具. 微软对PHP的支持越来越强,这点在IIS7中体现明显,不但有FastCgi的大力支持,还为PHP的管理专门增加了个PHP Manager.

linux下搭建lamp环境以及安装swoole扩展

linux下搭建lamp环境以及安装swoole扩展   一.CentOS 6.5使用yum快速搭建LAMP环境 准备工作:先更新一下yum源 输入下面命令: yum -y update 1.安装Apache [[email protected] ~]# yum -y install httpd # 开机自启动 [[email protected] ~]# chkconfig httpd on # 启动httpd 服务 [[email protected] ~]# service httpd s

win2008 iis7/iis7.5下最简单最强安装多版本PHP支持环境,以及解决主机宝php版本过低问题 支持不同网站不同php版本

利用PHP Manager,windows 2008 R2 IIS7.5安装多版本PHP环境 个人对在windows 2008 R2上,在iis环境中配置安装php环境实践中的注意点: 1.如需要在服务器上配置mysql的话,在配置php环境前先安装mysql.(根据自己的需求,下载相应的mysql版本) mysql安装配置步骤请查看:http://www.jb51.net/article/39188.htm sqlserver 2008安装:http://www.jb51.net/articl

在Windows 64位下为PHP5.6.14安装redis扩展

一.php安装redis扩展 1.使用phpinfo()查看当前版本的信息 2.根据PHP版本号,编译器版本号和CPU架构 选择php_redis-2.2.5-5.6-nts-vc11-x64.zip和php_igbinary-1.2.1-5.5-nts-vc11-x64.zip 下载地址: http://windows.php.net/downloads/pecl/snaps/redis/2.2.5/ http://windows.php.net/downloads/pecl/releases

在Windows 64位下为PHP5.6.14安装memcache扩展

1.现在要使用php连接memcached服务器,则需要引入对应的php-memcache.dll扩展,需要注意的是在windows下找对应的dll扩展要非常谨慎,一般要考虑以下几点:(查看phpinfo即可) 1.php版本 2.TS还是NTS(线程安全or不安全) 3.compile是vc6还是vc9 我选择的是此版本: http://windows.php.net/downloads/pecl/releases/memcache/3.0.8/ 然后将里面的php_memcache.dll放

centos6.3下php5.3.23编译安装php-redis扩展

下载php-redis扩展 https://github.com/nicolasff/phpredis 操作系统 centos6.3 php版本 php5.3.23 安装php扩展需要 phpize,phpize属于php-devel,所以要先安装php-devel yum install php-devel centos yum安装的php,找不到目录的话,可以 /usr/bin/php-config    --prefix 获取到安装目录     --libs 库文件    --extens

Linux下,如何给PHP安装pdo_mysql扩展

下载了一个免费开源的广告系统(openadserver),在Linux上安装时,提示要安装 pdo_mysql 扩展,先前有过编译安装 soap扩展 的经历,今天要编译安装 pdo_mysql 扩展,应该不难吧! 参考文献如下: PHP5不重新编译,如何安装自带的未安装过的扩展,如soap扩展? 参考上述教程,在第4步骤的“运行 configure 命令”,改成如下命令即可: ./configure --with-pdo-mysql=/usr/local/mysql --with-php-con

Linux rabbitmq的安装和安装amqp的php插件

RabbitMQ是一个消息代理.它的核心原理非常简单:接收和发送消息.你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件投递到你的收件人处.在这个比喻中,RabbitMQ是一个邮箱.邮局.邮递员.RabbitMQ和邮局的主要区别是,它处理的不是纸,而是接收.存储和发送二进制的数据——消息. 第一步 安装erlang rabbitmq的依赖 wget http://www.erlang.org/download/otp_src_17.4.tar.gztar -zxvf otp_src_1

ubuntu下docker简单安装rabbitmq

一.docker安装只需要几步即可,安装docker和切换镜像源见:ubuntu下docker简单安装mysql # 下载镜像 docker pull rabbitmq # 启动镜像 docker run --name rabbitmq -p 15672:15672 -p 5672:5672 -d rabbitmq:latest # 进去镜像实例中安装管理界面 docker exec -it rabbitmq bash # 镜像实例中输入命令安装管理台 rabbitmq-plugins enab