интеграция node.js / ruby ​​с beanstalkd - PullRequest
1 голос
/ 04 февраля 2011

Это связано с другим вопросом , относящимся к обработке платежей, и это мой пример использования, но я рассматривал попытку интеграции node.js и ruby ​​на одном сервере с помощью beanstalkd.По сути, я хочу использовать node.js в качестве основного веб-сервера, но когда мне нужно выполнить некоторую обработку платежей, я бы хотел использовать что-то надежное и стабильное, например, ruby.

Я собирался использоватьbeanstalkd как способ, чтобы node.js помещал в очередь задания по обработке платежей, чтобы ruby ​​мог выполнять их в фоновом режиме.Документация для beanstalkd немного скудна, поэтому мне сложно понять, насколько это хороший подход, или как я бы поступил.Из того, что я могу сказать, однако, должно быть довольно просто запустить процесс beanstalkd, а затем подключить к нему файл node.js, чтобы отправить ему задания, и сценарий ruby, который может выполнять задания и отправлять обратно результаты.

Ответы [ 2 ]

3 голосов
/ 08 февраля 2011

Beanstalk подходит для этой задачи. Убедитесь, что вы используете опцию binlog, чтобы сделать задания постоянными между перезапусками beanstalkd.

Ваши процессы node.js будут использовать трубу (называемую, скажем, "платежами") и помещают в нее задания с соответствующим приоритетом.

Ваш скрипт на Ruby может наблюдать трубку платежей и обрабатывать задания.

Убедитесь, что вы предоставили заданиям соответствующий TTL - вы хотите убедиться, что обработка платежей успеет завершиться, прежде чем beanstalk решит, что задание не выполнено, и поставит его в очередь.

Просто любопытно - как вы сообщите клиенту, что платеж прошел успешно? Возможно, скрипт Ruby обновит запись в базе данных?

0 голосов
/ 08 февраля 2011

Таким образом, после того, как я достаточно поверил, я нашел документацию, которая мне действительно нужна для оценки beanstalkd. В исходном коде есть документ протокола , на который нет ссылок из того, что я читал, или с главной страницы (хотя она находится в папке с именем doc), которая дает более подробную информацию о его возможностях и ограничениях.

Это выглядит очень хорошо как асинхронная рабочая очередь, которая идеально подходит для node.js, и было бы неплохо общаться с некоторым кодом Ruby для обработки платежей, но, как говорит dkam, как мне получить ответ вернуться к node.js, чтобы иметь возможность обновить клиента. Хотя я думаю, что это имеет смысл для многих задач, для меня этого недостаточно.

Учитывая совет Альфреда, я исследовал redis, и хотя это не совсем то, что мне нужно прямо из коробки, я думаю, что этого будет достаточно. Для Ruby уже существует библиотека актеров , созданная поверх redis, поэтому я думаю, что я должен быть в состоянии сделать что-то простое, которое может общаться между нодой и Ruby с грубой семантикой стиля актера или, по крайней мере, с обратным вызовом семантика.

...