У меня есть приложение, которое реагирует на сообщения, отправленные клиентами. Одно сообщение — reload_credentials
, которое приложение получает каждый раз, когда регистрируется новый клиент. Затем это сообщение подключается к базе данных PostgreSQL, выполняет запрос всех учетных данных, а затем сохраняет их в обычном хеше Ruby ( client_id => client_token ).
Некоторые другие сообщения, которые может получать приложение, — это start
,stop
,pause
, которые используются для отслеживания времени некоторых сеансов. Я хочу сказать, что я представляю, как приложение работает следующим образом:
- клиент отправляет сообщение
- сообщение ставится в очередь
- очередь обрабатывается
Но, например, я не хочу блокировать реактор. Кроме того, давайте представим, что у меня есть сообщение reload_credentials
, следующее в очереди. Я не хочу, чтобы какое-либо другое сообщение из очереди обрабатывалось до тех пор, пока учетные данные не будут перезагружены из БД. Кроме того, пока я обрабатываю определенное сообщение (например, ожидаю завершения запроса учетных данных), я хочу разрешить постановку в очередь других сообщений.
Не могли бы вы направить меня к решению такой проблемы? Я думаю, что мне, возможно, придется использовать em-synchrony
, но я не уверен.