PHP 메시지 큐 개발 튜토리얼: 분산 타이밍 작업 스케줄러 구현
소개:
네트워크 애플리케이션의 급속한 발전으로 인해 많은 개발자는 이메일 보내기, 생성과 같은 복잡한 애플리케이션을 개발할 때 시간이 많이 걸리는 작업에 직면하는 경우가 많습니다. 보고서 등 이러한 작업은 일반적으로 많은 양의 서버 리소스를 차지하므로 시스템의 응답 속도가 느려지거나 시간 초과로 인해 오류가 발생하기도 합니다. 이 문제를 해결하기 위해 개발자들은 이러한 시간 소모적인 작업을 비동기식으로 처리할 수 있는 방법을 찾기 시작했고 메시지 대기열은 매우 효과적인 솔루션이 되었습니다. 이 기사에서는 PHP 메시지 대기열을 사용하여 분산 예약 작업 스케줄러를 구현하는 방법을 소개합니다.
목차:
<?php // 配置消息队列服务 $config = [ 'host' => '127.0.0.1', 'port' => 5672, 'user' => 'guest', 'pass' => 'guest', 'vhost' => '/' ]; // 连接消息队列服务 $connection = new AMQPStreamConnection($config['host'], $config['port'], $config['user'], $config['pass'], $config['vhost']); $channel = $connection->channel(); // 声明任务队列 $channel->queue_declare('task_queue', false, true, false, false); // 设置任务 $taskData = [ 'id' => uniqid(), 'execution_time' => time() + 3600, // 执行时间延迟一小时 'payload' => 'Hello, World!' ]; // 发送任务 $message = new AMQPMessage(json_encode($taskData), ['delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]); $channel->basic_publish($message, '', 'task_queue'); // 关闭连接 $channel->close(); $connection->close(); ?>소비자 코드는 다음과 같습니다.
<?php // 连接消息队列服务 $connection = new AMQPStreamConnection($config['host'], $config['port'], $config['user'], $config['pass'], $config['vhost']); $channel = $connection->channel(); // 声明任务队列 $channel->queue_declare('task_queue', false, true, false, false); // 注册任务处理器 $callback = function ($message) { $taskData = json_decode($message->body, true); // 判断任务执行时间是否到达 if (time() >= $taskData['execution_time']) { // 执行任务 echo "Task ID: {$taskData['id']} "; echo "Task Payload: {$taskData['payload']} "; // TODO: 执行具体的脚本 } else { // 重新放回队列 $message->nack(false, true); } }; // 开始消费任务 $channel->basic_qos(null, 1, null); $channel->basic_consume('task_queue', '', false, false, false, false, $callback); // 循环处理任务 while (count($channel->callbacks)) { $channel->wait(); } // 关闭连接 $channel->close(); $connection->close(); ?>
위 내용은 PHP 메시지 큐 개발 튜토리얼: 분산 예약 작업 스케줄러 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!