Я работаю с XMPP, и у меня есть обратный вызов сообщения, который активируется при каждой отправке сообщения. Моя цель - отправить данные, поступающие по сообщению, в API в обратном вызове и на основе ответа отправить что-то обратно с помощью клиента XMPP.
Мой код для этого выглядит следующим образом
admin_muc_client.activate_message_callbacks do |m|
sender = m.from.resource
room_slug = m.from.node
message = m.body
r = HTTParty.get('http://example.com/api/v1/query?msg=message')
Rails.logger.debug(r.inspect)
admin_muc_client.send_message("Message #{r.body}") if m.from.resource != 'admin'
end
Меня беспокоит то, что, поскольку обратный вызов выполнен и запрос к API будет блокирующим вызовом, это может стать узким местом для всего приложения. Я бы предпочел использовать что-то вроде AJAX для Javascript, который запускал бы запрос и отправлял бы данные, когда доступен ответ. Как я могу реализовать это в Ruby?
Я рассмотрел delayed_job и backgroundrb, которые выглядят как инструменты для операций «запустить и забыть». Мне понадобится что-то, что активирует обратный вызов асинхронно с ответом.
Я был бы очень признателен за помощь в том, как добиться желаемого асинхронного поведения. Я также знаком с очередями сообщений, такими как RabbitMQ, которые, как мне кажется, будут значительно усложнять.