2017-02-04 13 views
0

У меня есть контроллер рельсов (скажем, в приложении A), ответ которого зависит от данных из другого приложения (скажем, приложения B).Получить ответ очереди сообщений внутри контроллера rails

Я использую RabbitMq для связи между приложениями.

Я не могу отдать ответ от контроллера до тех пор, пока работник очереди не получит ответ от приложения B. Поэтому в настоящее время, когда я получаю HTTP-вызов в приложении A, я публикую в приложении B через очередь RabbitMq для извлечения Необходимые данные. Я слушаю ответ приложения B в очереди, созданной жемчужиной кроссовки. Я хочу получить эти данные из очереди «кроссовки» внутри контроллера приложения A.

Итак, вопрос в том, как ждать ответа RabbitMq в контроллере? А также, если я могу дождаться ответа внутри контроллера, как я могу выяснить, какой ответ очереди для HTTP-вызова.

ответ

0

Для решения второй проблемы вы можете отправить случайно сгенерированную строку вместе с запросом, отправляемым в приложение B. И приложение B при ответе также отправит ту же строку, что и он, с запросом. Таким образом, контроллер A будет знать, для чего запрашивается ответ.

Теперь, придя к первому вопросу, я думаю, что rabbitmq не является правильным инструментом для выполнения такой вещи. Даже если вы можете дождаться сообщения, это будет очень медленный роман. по сравнению с этим лучшим способом было бы представить приложение B как API. Это увеличит скорость приложения во много раз.

Если API не является вариантом, вы можете посмотреть this link о том, как создать пользователя.