2013-03-20 3 views
1

다음과 같은 상황에서 NodeJS 응용 프로그램을 사용할 수 있습니다. 매우 복잡한 수학 공식을 사용해야하는 것을 사용자가 계산하도록 요청을받습니다. 현재, 나는이 모든 과정을 그 순간에 실행하고, 가치를 파악한 다음 다시 사용자에게 보냅니다. 불행하게도, 이것은 비동기 친절한 것은 아닙니다 :)작업자가 생산자에게 메시지를 다시 보낼 수 있습니까?

대신에이 전체 작업을 백그라운드에서 실행하고 작업이 완료되면 작업자는 계산 된 값이 무엇이든간에 나에게 돌아옵니다. 그런 다음 사용자에게 다시 보냅니다.

Kue, Celery, ResqueBeanstalk을 비롯한 다양한 작업 대기열을 살펴 보았지만이 중 어떤 것도이 기능을 제공하지 않는 것 같습니다. 이메일을 보내거나 일종의 가치있는 일을하지 않아도되는 업무를 수행하는 것과 같은 일을하는 데 효과적입니다. 성공했는지 여부는 간단하지만 그 밖의 것이없는 것처럼 보입니다. 작업자는 실제로 작업을 만든 원래 제작자에게 사용자 지정 메시지를 다시 보냅니다.

위에서 언급 한 대기열 중 어느 것도 이것을 지원하지 않는다고 잘못 되었습니까? 그렇다면이 기능을 사용하는 방법에 대해 배울 수있는 문서의 위치를 ​​알려 주시기 바랍니다. 그렇지 않으면이 기능을 지원하는 다른 사용자에게 나를 가리킬 수 있습니까?

+0

Gearman을이 – Fluffy

답변

0

당신은 https://github.com/mher/node-celery

노드 셀러리 셀러리를 사용할 수는 큐의 작업을 할 수 있습니다 및 실행

var celery = require('node-celery'), 
    client = celery.createClient({ 
     CELERY_BROKER_URL: 'amqp://guest:[email protected]:5672//', 
     CELERY_RESULT_BACKEND: 'amqp' 
    }); 

client.on('connect', function() { 
    client.call('factorial', [1000000], function(result) { 
     console.log(result); 
    }); 
}); 
+1

그 대기 작업을 처리 얻을 것이다 어떻게 @mher을 할 수 있습니까? 노드 셀러리 문서를 보았습니다. 일어나는 일을 이해하기가 매우 어렵습니다. 노드 셀러리의 어떤 기능이 메시지를 소비하고 작업을 처리합니까? –

1

의 결과 당신은 전용 큐의 결과를 가져 오기 한 후 사용자에게 푸시해야을받을 수 있습니다.
작업 대기열 관리자로 celery를 사용하고 사용자에게 작업 결과를 반환하기 위해 long-polling 또는 socket을 사용합니다.
nodeJS 앱에서 노드 셀러리 https://github.com/mher/node-celery을 사용하거나 메시지를 셀러리 예약 대기열에 직접 삽입 할 수 있습니다.
예를 들어

var amqp = require('amqp'); 
var connection = amqp.createConnection({ 
    host: 'localhost', 
    port: 5672 
}); 
connection.on('ready',function(){ 
    connection.publish('celery', {id:uuid.v4(), task:'yourapp.tasks.usefultask', args:['firstArg','secondArg'], kwargs:{}},{ 
     'contentType': 'application/json' 
     }); 
    }); 
관련 문제