2012-10-03 2 views
0

이 개념과 모든 사람이 생각하는 것을 확인하고 싶습니다. Gearman을 사용하여 백그라운드에서 몇 가지 작업 (주로 데이터 수집 및 처리)을 실행하고 싶습니다.REST API가있는 Gearman Worker

저는 Gearman을 PHP 프레임 워크 (이 경우에는 CakePHP2)로 설정하려고합니다. 필자가 Gearman을 이해하는 한, 작업자는 단일 PHP 스크립트 (예 : worker.php)를 실행하는 PHP 데몬 일뿐입니다.

PHP 프레임 워크에서 이미 작성한 로직/코드를 단일 작업자 스크립트로 가져 오는 방법을 알아 내려고합니다. 그렇지 않으면 내가 모델과 같은 전부를 다시 만들어야 할 수도 있습니다.

내 솔루션은 worker.php를 유지하고 작업자 스크립트가 CURL을 통해 REST API 호출을 시작하도록하는 것입니다. 좋은 선택의 여지가 있습니까? 컬 전화 걸기

답변

1

은 내가 먼저 찾아 것 .. 나에게 오버 헤드 약간의 소리 다음

  • 로드 작업자의 프레임 워크의 일부 (의 호출 &을하는 것보다 저렴 프레임 워크 호출)
  • "콜백"을위한 특수 작업자를 만듭니다. 예를 들어, 실제 근로자는 실제 작업을 수행하고 완료시 "콜백"대기열에 결과를 제출합니다. 그 콜백 작업자는 Gearman으로부터 작업을 수락하고 거기서 가져갈 것입니다 (마치 REST API 엔드 포인트가 거기에서 가져 오는 것처럼).

기계간에 작업을 분할하지 않는 한 어떤 방식 으로든 여분의 HTTP 호출을하는 것은 좋지 않습니다. PHP로 직접 작업 할 수 있다면 왜 아파치가 필요합니까?

+0

감사합니다. 나는 cURL 호출을 수행하는 것을 들었습니다. – MechaStorm

0

답변에 추가로 추가하고 있지만 답변이 너무 짧습니다.

내가 CakePHP의 콘솔로 Gearman을 노동자를하고

// Add the example configs below 
[program:my-gearman-test] 
command= /path/to/cakephp/app/Console/cake gearman test 
process_name= %(process_num)g-gearman-test 
numprocs=1 
directory=/path/to/cakephp/app 
autostart=true 
autorestart=true 
user=www-data 
stdout_logfile=/path/to/logs/worker_stdout.log 
stdout_logfile_maxbytes=1MB 
stderr_logfile=/path/to/logs/worker_stderr.log 
stderr_logfile_maxbytes=1MB 

가 그럼 난 supervisord를 운영하는 supervisord 설정 주위를 포장 할 수 있었다, 그리고 그것은 케이크 콘솔 명령을 초기화하기 시작합니다. 이제는 CakePHP 프레임 워크의 작업자 부분에서 독립 실행 형 worker.php 스크립트 대신 프레임 워크를 사용하여 얻은 이점을 모두 얻었습니다.