(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());
});
} 项目需要使用websocket推送最新订单,客户服务器非linux不支持swoole,因此使用原生,直接上代码(1).PHP服务端<?php ini_set('error_reporting', E_ALL ^ E_NOTICE); ini_set...
php arrayaccess 官方的说法是让你能以数组的形式访问对象,对于这种php内置接口一直不太明白有什么用,坚持多看文章,终于理解,特来分享,思路不同,更易于理解。(1).创建一个学生类,并且实现arrayaccess 接口。<?php class studen...
(1).学习目标: 了解常见信号类型(百度PHP支持的信号类型),(2).相关函数学习: (2.1).pcntl_signal函数用于设置一个信号管理器接收进程信号,参数1:信号类型,参数2:回调函数,用于在接收到参数1类型的信...
今天帮朋友查询wordpress执行超级慢的原因,特此记录开启fpm的慢日志,记录执行超过30秒的脚本request_slowlog_timeout = 30 slowlog = var/log/slow.log查看日志[23-May-2019 17...
经常我们下载国外资源容易被墙,可以通过php脚本获取远程文件流然后输出给我们的浏览器来下载。<?php //设置下载文件的url $url = 'https://mirrors.huaweicloud.com/ubuntukylin/ubuntukylin-19....
使用openssl扩展对应替换mcrypt的函数,(比较麻烦,但是openssl是未来趋势)在新版php中编译mcrypt扩展使用一个纯php代码实现的mcrypt扩展库,git地址为https://github.com/phpseclib/mcrypt_compat,每个mcrypt的方法都已经实...