Как выполнить очень маленький объем кода асинхронно? - PullRequest
1 голос
/ 18 июля 2011

Я бы хотел выполнить небольшой объем кода асинхронно в моем приложении rails.Код регистрирует некоторую известную информацию.Я бы хотел, чтобы эта задача не блокировала остальную часть ответа моего приложения.Операция слишком легкая и частая, чтобы ее можно было выполнять в качестве отложенных задач.

Я думаю просто использовать:

Thread.new do
  # my logging code
end

и называть это днем.Это достижение того, чего я хочу достичь?Есть ли недостатки?

Ответы [ 2 ]

1 голос
/ 18 июля 2011

Это может быть излишним для вашего конкретного использования, но рассматривали ли вы возможность использования какой-либо промежуточной программы очереди сообщений, такой как STOMP, AMQP, OpenWire или даже Jabber?

Базовая схема (псевдокод!) Будет:

s = client.create_connection(user,pass,server_ip,port)
s.message_send("Log Message Goes Here")

Тогда у вас будет по крайней мере один «потребитель» на другом конце очереди сообщений, который будет записывать сообщение журнала в файл / базу данных / чат / IRC-канал / что угодно, что вы хотите на самом деле - это все - все код ...:)

Это также означало бы, что, если в будущем вы захотите передать задания по обработке высокой интенсивности (например, создание счета), у вас уже будет инфраструктура для этого.

Также, если вы ищете действительно простой сервер обмена сообщениями, я рекомендую RabbitMQ - он написан на Erlang (но не позволяйте этому оттолкнуть вас!) И очень прост в настройке.

Это мой первый пост, поэтому я не могу публиковать более двух ссылок, но я опубликовал ссылки на все технологии, упомянутые выше, в сущности @ https://gist.github.com/1090372

0 голосов
/ 18 июля 2011

Помимо обработки некоторых базовых проблем с ресурсами, этого должно быть достаточно.Ресурс базы данных приходит на ум, если вы входите туда ... файл, если вы заходите туда.Но основной подход хорош, я думаю.Чем проще, тем лучше ...

...