RabbitMQ+PHP7扩展模式实现消息队列

windows下 PHP7 安装 扩展amqp
先搞清楚自己电脑上php的 线程安全 
phpinfo 下 看 Thread Safe 值 
接下来下载dll文件 地址http://pecl.php.net/package/amqp
php7.2以上的建议使用1.10.2版本
PECL :: Package :: amqp 1.10.2 for Windowshttps://pecl.php.net/package/amqp/1.10.2/windows注意 php版本 ,X86 和X64 根据自己情况  , NTS  和 TS 就是那个thread safty 的状态
下载解压

 将php_amqp.dll文件放到php目录的ext文件夹下
将rabbitmq.4.dll文件放到php根目录
extension=php_amqp.dll 
重启php则php扩展就安装好了

RabbitMQ的服务端不建议在Windows环境下安装,在局域网的linux服务器或者虚拟机下安装配置。本人公司开发环境正好有一个RabbitMQ服务器。
生产者代码。

<?php
$config = [
        'host'     => '192.168.0.5',
        'vhost'    => 'vhost',
        'port'     => 5672,
        'login'    => 'test',
        'password' => ''
];
$connection = new \AMQPConnection($config);
$connection->connect() or die("Cannot connect to the broker!\n");
$ch = new \AMQPChannel($connection);
$ex = new \AMQPExchange($ch);
//消息的路由键,一定要和消费者端一致
$routingKey = 'pin_dat';
//交换机名称,一定要和消费者端一致,
 $exchangeName = 'pin';
 $ex->setName($exchangeName);
 $ex->setType(AMQP_EX_TYPE_DIRECT);
 $ex->setFlags(AMQP_DURABLE);
 $ex->declareExchange();
 //消息内容
 $msg = array(
      'type'  => $type,
      'dat' => $dat,
  );
  //发送消息到交换机,并返回发送结果
  //delivery_mode:2声明消息持久,持久的队列+持久的消息在RabbitMQ重启后才不会丢失
  $ex->publish(json_encode($msg), $routingKey, AMQP_NOPARAM, array('delivery_mode' => 2))."\n";
   //代码执行完毕后进程会自动退出
$ch->close();
$connection->disconnect();// 断开连接

消费者代码
 

/**
     * MQ consumer 消费者
    */
    public function consumer(){
        set_time_limit(0);
$cfg => [
        'host'     => '192.168.0.5',
        'vhost'    => 'vhost',
        'port'     => 5672,
        'login'    => 'test',
        'password' => ''
];
$connection = new \AMQPConnection($config);
$connection->connect() or die("Cannot connect to the broker!\n");
        //在连接内创建一个通道
        $ch = new \AMQPChannel($connection);
        //创建一个交换机
        $ex = new \AMQPExchange($ch);
        //声明路由键
        $routingKey = 'pin_dat';
        //声明交换机名称
        $exchangeName = 'pin';
        //设置交换机名称
        $ex->setName($exchangeName);
        //设置交换机类型
        //AMQP_EX_TYPE_DIRECT:直连交换机
        //AMQP_EX_TYPE_FANOUT:扇形交换机
        //AMQP_EX_TYPE_HEADERS:头交换机
        //AMQP_EX_TYPE_TOPIC:主题交换机
        $ex->setType(AMQP_EX_TYPE_DIRECT);
        //设置交换机持久
        $ex->setFlags(AMQP_DURABLE);
        //声明交换机
        $ex->declareExchange();
        //创建一个消息队列
        $q = new \AMQPQueue($ch);
        //设置队列名称
        $q->setName('pin_queue');
        //设置队列持久
        $q->setFlags(AMQP_DURABLE);
        //声明消息队列
        $q->declareQueue();
        //交换机和队列通过$routingKey进行绑定
        $q->bind($ex->getName(), $routingKey);
        //接收消息并进行处理的回调方法

        //设置消息队列消费者回调方法,并进行阻塞
        $q->consume(function ($envelope, $queue) {
            //休眠两秒,
            //sleep(1);
            //echo消息内容
            echo $envelope->getBody()."\n";
            //显式确认,队列收到消费者显式确认后,会删除该消息
            $queue->ack($envelope->getDeliveryTag());
        });
        //$q->consume("receive", AMQP_AUTOACK);//隐式确认,不推荐
    }

先启动消费者 生产者才可以发消息成功

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hangbobo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值