2014-06-17 7 views
1

레일즈 앱과 NodeJS 서버 세트가 있습니다. 나는 그 NodeJS 서버를 사용하여 PhantomJS를 사용하여 URL을 구문 분석합니다. 내 Rails 응용 프로그램에서 URL을 파싱 할 준비가 된 NodeJS 서버를 알고 파싱되면 결과가 비동기 적으로 Rails 서버로 다시 전송됩니다.여러 NodeJS 서버로 작업을 보내는 레일스에 우선 순위 대기열을 갖는 방법은 무엇입니까?

내 문제는 일부 NodeJS 서버가 구문 분석 할 준비가 될 때까지 구문 분석해야하는 URL이 대기열에 대기하도록 Rails에 대기열이 있어야하는 경우입니다. 그래서, 내 질문은 :

나 큐와 NodeJS 서버의 상태를 계속 확인하자 자유 해당 큐에서 작업을 보낼 것입니다/루비 레일에서 좋은 우선 순위 큐 솔루션이 될 것입니다 무엇 NodeJS 서버.

이전에는 Sidekiq을 사용했지만이 경우 Worker는 여기서는 값 비싼 작업을하지 않고 NodejS 서버 중 하나에 Rails 대기열을 위임하기 때문에이 경우에는 필요하지 않다고 생각합니다.

답변

1

예를 들어으로 Redis를 사용할 수 있습니다. 우선 순위 수준마다 목록을 만드십시오. 레일스가 해당 목록에 우선 순위에 따라 URL을 넣으면 차단 팝업창에 작업이 표시 될 때까지 대기합니다. 간단하고 가벼운 redis는 사용중인 두 플랫폼 모두에서 잘 지원되어야합니다.

그러나 실제로는 중앙 집중식 저장소를 가정에서 롤링하는 우선 순위 대기열 메커니즘으로 적용 할 수 있습니다. 예를 들어, 우선 순위 및 상태가있는 경우에는 밀 RDBMS를 실행하면서 테이블을 폴링 할 수 있습니다 (준비, 실행, 완료, 오류 등) 열을 필터링하고 정렬 할 수 있습니다. 대용량 유스 케이스의 경우 솔루션을 권장하지는 않지만 가능합니다.

+0

답변 해 주셔서 감사합니다. 다음 질문은 우선 순위 대기열이 설정되면 어떻게 작업을 폴링합니까? 대기열에 무언가가 있는지 계속 확인하는 어떤 종류의 cron이 있습니까, 아니면 어떻게합니까? –

+0

블로킹 작업의 장점은 폴링 할 필요가 없다는 것입니다. 클라이언트가 BLPOP 명령을 실행하면 메시지가 나타날 때까지 유휴 상태 (더 잘 알려진 블로킹, 따라서 이름)가됩니다. pastebin에 다음 예제 코드가 있습니다. http://pastebin.com/pEUW0G56 직접 시도하지 않았으므로 볼 수는 없지만,보고 나서 볼 수 있습니다. 개념은 바른 길에있다. – Fitzsimmons

+0

메시지가 표시되면 누가 그것을 관리합니까? 그 일이 언제 올바르게 될 때 관리 할 수있는 수업이 필요합니까? –