PHP安装配置RabbitMQ(window)

RabbitMQ简要概括

1、AMQP:Advanced Message Queuing Protocol,是一个提供统一消息服务的应用层标准协议。

2、IPC(单一系统进程间通信) -> socket(不同机器间进程通信) -> AMQP(解决大型系统模块与组件间通信)

3、RabbitMQ 基于 Erlang 开发,是 AMQP 的一个开源实现。

4、RabbitMQ 系统架构图:

5、名词术语:

  • RabbitMQ Server(broker server):维护一条从 Producer 到 Consumer 的路线,保证数据能够按照指定的方式进行传输;
  • Client A & B:数据发送方,Producers create messages and publish (send) them to a broker server (RabbitMQ),一个有效的 Message 包含 payload 和 label 两部分
  • Client 1、2、3:数据消费方,Consumers attach to a broker server (RabbitMQ) and subscribe to a queue
  • Exchange:Exchanges are where producers publish their messages
  • Queue: Queues are where the messages end up and are received by consumers
  • Binding:Bindings are how the messages get routed from the exchange to particular queues

还有几个隐式的概念:

  • Connection:Producer 和 Consumer 通过 TCP 连接到 RabbitMQ
  • Channel:它建立在上述的 TCP 连接中,数据流动都是在 Channel 中进行的

此外,Exchanges 分三种类型:

  • direct:如果 routing key 匹配,那么 Message 就会被传递到相应的 queue
  • fanout:会向响应的 queue 广播
  • topic:对 key 进行模式匹配,比如 ab* 可以传递到所有 ab* 的 queue

RabbitMQ安装使用

第一步:下载并安装erlang

原因:RabbitMQ服务端代码是使用并发式语言Erlang编写的,安装Rabbit MQ的前提是安装Erlang。

下载地址:http://www.erlang.org/downloads

根据本机位数选择erlang下载版本。

下载完是这么个东西:

双击,点next就可以。

选择一个自己想保存的地方,然后next、finish就可以。

安装完事儿后要记得配置一下系统的环境变量。

此电脑-->鼠标右键“属性”-->高级系统设置-->环境变量-->“新建”系统环境变量

变量名:ERLANG_HOME

变量值就是刚才erlang的安装地址,点击确定。

然后双击系统变量path

点击“新建”,将%ERLANG_HOME%\bin加入到path中。

最后windows键+R键,输入cmd,再输入erl,看到版本号就说明erlang安装成功了。

第二步:下载并安装RabbitMQ

下载地址:Installing RabbitMQ | RabbitMQ

双击下载后的.exe文件,安装过程与erlang的安装过程相同。

RabbitMQ安装好后接下来安装RabbitMQ-Plugins。打开命令行cd,输入RabbitMQ的sbin目录。

我的目录是:D:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.3\sbin

然后在后面输入rabbitmq-plugins enable rabbitmq_management命令进行安装

打开sbin目录,双击rabbitmq-server.bat

 等几秒钟看到这个界面后,访问http://localhost:15672

然后可以看到如下界面

默认用户名和密码都是guest

登陆即可。

安装php扩展amqp

先查看自己的php版本

记住版本  至于这个线程安全问题 这里引用了别人的自己看看吧  http://blog.csdn.net/aoyoo111/article/details/19021295

接下来下载dll文件 地址http://pecl.php.net/package/amqp

下载稳定版的,点击DLL

php版本 ,X86 和X64 根据自己情况  , NTS  和 TS 就是那个thread safty 的状态 这个大家都会看吧 就不多说了

下载解压

将php_amqp.dll文件放到php目录的ext文件夹下  见下图:

 将rabbitmq.4.dll文件放到php根目录 见下图:

 php.ini里面添加    

apache 修改http.conf 文件 添加

之后重启apache  

 php 中使用Rabbitmq实现实现消息发送和接收

  1. 建立一个send.php文件用来发送消息

    <?php
    /**
    * 发送消息
     */
    $exchangeName = 'demo';
    $routeKey = 'hello';
    $message = 'Hello World!';
    // 建立TCP连接
    $connection = new AMQPConnection([
        'host' => 'localhost',
        'port' => '5672',
        'vhost' => '/',
        'login' => 'guest',
    'password' => 'guest'
    ]);
    $connection->connect() or die("Cannot connect to the broker!\n");
    try {
        $channel = new AMQPChannel($connection);
    
        $exchange = new AMQPExchange($channel);
        $exchange->setName($exchangeName);
        $exchange->setType(AMQP_EX_TYPE_DIRECT);
        $exchange->declareExchange();
    
        echo 'Send Message: ' . $exchange->publish($message, $routeKey) . "\n";
        echo "Message Is Sent: " . $message . "\n";
    } catch (AMQPConnectionException $e) {
        var_dump($e);
    }
    $connection->disconnect();// 断开连接

  2. 建立一个 receive.php 文件用来接收消息

    <?php
    /**
     * 接收消息
     */
    $exchangeName = 'demo';
    $queueName = 'hello';
    $routeKey = 'hello';
    // 建立TCP连接
    $connection = new AMQPConnection([
        'host' => 'localhost',
        'port' => '5672',
        'vhost' => '/',
        'login' => 'guest',
        'password' => 'guest'
    ]);
    $connection->connect() or die("Cannot connect to the broker!\n");
    $channel = new AMQPChannel($connection);
    $exchange = new AMQPExchange($channel);
    $exchange->setName($exchangeName);
    $exchange->setType(AMQP_EX_TYPE_DIRECT);
    echo 'Exchange Status: ' . $exchange->declareExchange() . "\n";
    $queue = new AMQPQueue($channel);
    $queue->setName($queueName);
    echo 'Message Total: ' . $queue->declareQueue() . "\n";
    echo 'Queue Bind: ' . $queue->bind($exchangeName, $routeKey) . "\n";
    var_dump("Waiting for message...");
    // 消费队列消息
    while(TRUE) {
        $queue->consume('processMessage');
    }
    
    // 断开连接
    $connection->disconnect();
    function processMessage($envelope, $queue) {
        $msg = $envelope->getBody();
        var_dump("Received: " . $msg);
        $queue->ack($envelope->getDeliveryTag()); // 手动发送ACK应答
    }

  3. 测试

    1. 打开两个终端,先运行接收者脚本监听消息发送:php receive.php

    2. 在另一个终端中运行消息发送脚本:php send.php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值