이것은 enqueue 라이브러리로 쉽게 할 수 있습니다. 먼저 AMQP, STOMP, Redis, Amazon SQS, Filesystem 등과 같은 다양한 transports 중에서 선택할 수 있습니다.
둘째, 사용하기 쉽습니다. 설치 시작 :
enqueue/enqueue-bundle
라이브러리와 one of the transports을 설치해야합니다.
composer require enqueue/enqueue-bundle enqueue/fs
이제
의 당신이 당신의 POST 스크립트에서 메시지를 보낼 수있는 방법을 보자 : 당신이 프로세서 서비스를 생성해야하고 그것을 태그 소비를 들어
<?php
use Enqueue\Client\ProducerInterface;
use Symfony\Component\DependencyInjection\Container;
/** @var Container $container */
/** @var ProducerInterface $producer */ $producer = $container->get('enqueue.client.producer');
$producer->sendCommand('a_background_task', 'task_data');
당신은 파일 시스템 enqueue/fs
라이브러리를 선택 가정 enqueue.client.processor
태그 :
<?php
use Enqueue\Client\CommandSubscriberInterface;
use Enqueue\Psr\PsrContext;
use Enqueue\Psr\PsrMessage;
use Enqueue\Psr\PsrProcessor;
class BackgroundTask implements PsrProcessor, CommandSubscriberInterface
{
public static function getSubscribedCommand()
{
// do job
return self::ACK;
}
public function process(PsrMessage $message, PsrContext $context)
{
return 'a_background_task';
}
}
그리고 명령과 함께 소비자 실행
을
./bin/console enqueue : 소비 --setup-broker -vvv
대다수의 소비자가 필요할 가능성이 높습니다. 프로세스가 존재하면 재시작해야합니다. 이 문제를 해결하려면 일종의 프로세스 관리자가 필요합니다. 몇 가지 옵션이 있습니다.
http://supervisord.org/ - 추가 서비스가 필요합니다. 제대로 구성해야합니다. 이와 같은 순수 PHP 프로세스 관리자. Symfony 프로세스 구성 요소와 순수 PHP 코드를 기반으로합니다. 프로세스 재부팅, sigterm 신호 종료 등을 처리 할 수 있습니다. php \ swoole 프로세스 관리자가 이와 같습니다. 그것은 swoole PHP 확장을 필요로하지만 그것은 성능이 놀랍습니다.
존 감사합니다, 오늘 그걸 시도 할게요. +1. –
근로자를위한 크론 사용은 위험합니다. 이것을 고려하십시오 : cron을 사용하여 매분마다 작업자를 실행하지만 작업자는 작업을 수행하는 데 1 분 이상 소요됩니다. 일반적인 성능을 저하시키는 많은 프로세스가 자원 경쟁에 종사했습니다.서버가 다운 될 수 있습니다. –