2011-02-04 3 views
1

이것은 지급 처리와 관련된 another question과 관련이 있습니다. 예제는 유스 케이스이지만, node.js와 루비를 beanstalkd를 사용하여 동일한 서버에 통합하는 것을 고려하고있었습니다. 기본적으로 node.js를 메인 웹 서버로 사용하고 싶지만 지불 처리가 필요한 경우 루비와 같이 강력하고 안정적인 것을 사용하고 싶습니다.node.js/beanstalkd와의 루비 통합

beanstalkd를 사용하여 루비가 백그라운드에서 수행하는 지불 처리 작업 대기열을 node.js에 대기시키는 방법을 고려했습니다. beanstalkd에 대한 문서는 조금 슬림하므로 좋은 접근 방법인지 아니면 정확히 어떻게 접근 할지를 알아 내는데 어려움을 겪고 있습니다. 내가 알 수 있듯이, beanstalkd 프로세스를 시작한 다음 node.js를 연결하여 작업을 보내고 작업을 수행하고 결과를 되돌릴 수있는 루비 스크립트가 있어야한다.

+1

대신 redis 메시지 대기열 의미를 사용합니다. 사용할 수있는 아주 좋은 c 확장이 있기 때문에 node.js에서 더 빨라질 것이라고 생각합니다. – Alfred

답변

0

그래서 주위를 응원 한 후에 나는 beanstalkd를 평가하는 데 정말로 필요한 문서를 찾았습니다. 소스에 protocol document이 링크되어 있지 않습니다. 읽은 문서 나 메인 페이지 (문서라는 폴더에 있음에도 불구하고)의 기능 및 제한 사항에 대한 더 자세한 정보를 제공합니다.

비동기 작업자 대기열로 node.js에 매우 적합하며 지급 처리를 위해 루비 코드와 통신하는 데 적합 할 수 있지만 dkam에 따르면 어떻게해야합니까? 클라이언트를 업데이트 할 수 있도록 node.js에 다시 응답하십시오. 이것이 많은 업무에서 의미가 있다고 생각하지만, 내 업무에는 충분하지 않습니다.

알프레드의 충고에 비추어 볼 때, 나는 레디 스를 조사해 보았습니다. 그리고 그것이 내가 필요한 바로 그 것이 아니지만 충분하다고 생각합니다. 이미 actor library이 루비에 대한 redis 위에 구축되었으므로 노드와 Ruby 사이에 대략적인 액터 스타일 의미 또는 적어도 콜백 의미를 사용하여 간단하게 대화 할 수 있어야한다고 생각합니다.

+0

Beanstalk을 사용한다면 Node.js가 트랜잭션 레코드를 생성하고 상태를 "Queued"또는 유사하게 설정했을 것입니다. 이 레코드는 고객의 트랜잭션 상태가됩니다. Node.js는 해당 레코드를 폴링합니다. Ruby 프로세스가 작업을 잡았을 때 DB 레코드를 "Pending"으로 업데이트 한 다음 "Complete"또는 "Failed"를 완료하십시오. – dkam

+0

나는 이것에 대해 확실하지 않지만, Redis는 내가 추측하는 PubSub에 투표를 사용하지 않습니다. Redis는 번개가 빠르고 노드와 루비 프로세스와 같은 상자에 있습니다. 나는 이것이 아마도 데이터베이스를 폴링하는 것보다 더 깔끔한 설정이라고 생각한다. 그래도 내가 틀렸다면 듣기가 좋아. –

3

이 작업에는 콩 줄기가 적합합니다. binlog 옵션을 사용하여 beanstalkd 재시작 사이의 작업을 영구적으로 유지하십시오.

귀하의 Node.js를 프로세스 사용 튜브 ('지불'이라는 말을)하고 적절한 우선 순위, 그것으로 작업을했습니다.

귀하의 Ruby 스크립트는 을 지불 튜브을보고 작업을 처리 할 수 ​​있습니다.

작업에 적절한 TTL을 지정하십시오. Beanstalk이 작업이 실패했다고 가정하고 다시 대기열에 넣기 전에 결제 처리가 완료되도록하고 싶습니다.

궁금한 점 - 고객에게 지불이 성공했다는 피드백을 어떻게 전달할 예정입니까? 아마도 Ruby 스크립트가 데이터베이스의 레코드를 업데이트 할 것입니까?

+0

그래, 결국 beanstalkd 프로토콜 문서를 찾을 수 있었기 때문에 이것이 의미가 있었지만, 예를 들면, 그 고집 지점은 피드백이었다. 그 부분을 수행하는 유일한 방법은 node.js가 기다리고있는 일종의 리턴 튜브가 있거나 어쩌면 작업 ID와 관련된 리턴 튜브 일 수도 있다는 것입니다. 결국, 나는 redis가 더 나은 해결책일지도 모른다고 생각하고 있습니다. –