当前位置:首页 > PHP > 正文内容

php RabbitMQ消息队列

高老师8年前 (2019-04-01)PHP1705

(1).config.php 配置文件

<?php
/**
 * RabbitMQ_Config
 */
$config = [
    'host' => '127.0.0.1',
    'port' => '5672',
    'login' => 'guest',
    'password' => 'guest',
    'vhost' => '/'
];

(2).producer.php 生产者文件

<?php
//加载配置文件
require './config.php';
global $config;

//设置交换机和路由Key
$ename = 'e_linvo';
$rname = 'r_router';

//实例化AMQP(必须手动connect)
$conn = new AMQPConnection($config);
if ($conn->connect() == false)
{
    die('Cannot connect...');
}

//创建Channel(),Why?Who?
//如果每次访问MQ都建立一个连接,在量大的时候建立TCP开销巨大,Channel是在connection内部建立的逻辑连接
$channel = new AMQPChannel($conn);

//创建交换机并设置交换机名称
$exChange = new AMQPExchange($channel);
$exChange->setName($ename);

//通过交换机发送消息
$message = [
    'userid' => 1024,
    'username' => 'php',
];
$message = json_encode($message);

$exChange->publish($message, $rname);

echo '投递队列成功<br/>';

(3).consumer.php  消费者文件

<?php
//加载配置文件
require './config.php';
global $config;

//设置交换机和路由Key和队列key
$ename = 'e_linvo';
$rname = 'r_router';
$qname = 'q_queler';

//实例化AMQP(必须手动connect)
$conn = new AMQPConnection($config);
if ($conn->connect() == false)
{
    die('Cannot connect...');
}

//创建Channel(),Why?Who?
//如果每次访问MQ都建立一个连接,在量大的时候建立TCP开销巨大,Channel是在connection内部建立的逻辑连接
$channel = new AMQPChannel($conn);

//创建交换机并设置交换机名称、交换数据类型、持久化
$exChange = new AMQPExchange($channel);
$exChange->setName($ename);
$exChange->setType(AMQP_EX_TYPE_DIRECT);
$exChange->setFlags(AMQP_DURABLE);
$exChange->declareExchange();

//创建队列,设置队列名称,并设置持久化
$queue = new AMQPQueue($channel);
$queue->setName($qname);
$queue->setFlags(AMQP_DURABLE);
$queue->declareQueue();

//将队列和交换机和路由进行绑定
$queue->bind($ename, $rname);

//Cli阻塞接收消息队列
while (true)
{
    $queue->consume(function ($envelope, $queue) {

        //获取队列的数据
        $data = $envelope->getBody();//队列数据
        $data = json_decode($data);

        //处理数据
        if ($data)
        {
            //todo
            var_dump($data);
        }

        //手动Ack应答.确认收到信息.队列会删除本条
        $queue->ack($envelope->getDeliveryTag());
    });
}

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/81.html

分享给朋友:

“php RabbitMQ消息队列” 的相关文章

php经纬度计算距离

php经纬度计算距离

/**  * 计算两点地理坐标之间的距离  * @param  Decimal $longitude1 起点经度  * @param  Decimal $lati...

PHP模拟并发请求

PHP模拟并发请求

原理:使用curl_init()创建多个请求实例,再使用curl_multi_init()批量执行创建的多个请求实例。文件1:curl.php<?php  $threads=500;//并发请求次数 $url='http://blog.cn/index.php?';...

 php文件锁解决高并发

php文件锁解决高并发

前面的文章对于高并发下单商品导致商品库存为负值的问题请先阅读再阅读本篇文章一定对您有帮助,建议亲手测试较好。加上文件锁后的下单处理代码:【一】.阻塞模式:(如果其他进程已经加锁文件,当前进程会一直等其他进程解锁文件后继续执行)<?php //连接数据库 $con=mysqli_connect(...

php 获取当前执行文件,php 获取当前执行文件,php 获取当前文件

php 获取当前执行文件,php 获取当前执行文件,php 获取当前文件

php官方的超全局变量$_SERVER['PHP_SELF']也能直接获取,只不过如果url参数太多也会获取。下面提供一个方法获取/*  * 获取当前PHP文件名称  */ if (!function_exists('phpself&#...

php上传大文件,php大文件上传

php上传大文件,php大文件上传

(1).前端文件:<form action="upload.php" method="post" enctype="multipart/form-data">    &...

全方位认识PHP的SESSION

全方位认识PHP的SESSION

【一】.介绍session由于HTTP是无状态的请求,创建一个会话需要保持必须需要身份标识。当用户第一次访问,PHP会为用户创建一个唯一的sessionid,并将sessionid通过cookie发送给浏览器,并在服务器的临时文件创建一个以sessionid为名的文件用来保存这个sessionid保...