Реализация очередей сообщений с помощью контроллеров Web API - PullRequest
0 голосов
/ 03 февраля 2019

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

Очередь сообщений получает запрос и затем уведомляет уровень данных.Затем уровень данных публикует ответ в той же очереди с идентификатором correlation_id, который совпадает с запросом.Проблема в том, что это не работает, в результате чего метод контроллера API просто зависает бесконечно.Я делаю это неправильно или что-то упустил?Есть ли лучший подход к использованию очередей сообщений с контроллерами Web API?Мое основное предположение / требование заключается в том, что запросы данных должны обрабатываться в контексте метода контроллера Web API, в противном случае метод никогда не будет ничего возвращать и т. Д.

Я смотрел учебник по RPC RabbitMQ, но этокажется, зависит от того факта, что он немедленно возвращается при срабатывании события consumer_received.Как это можно адаптировать, чтобы можно было работать с обработчиком событий?

[HttpGet]
public async Task<ActionResult<IEnumerable<string>>> Get()
{
    var resp = await _messageQ.SendRPC("Get Some data", "TestQueue");
    return Ok(resp);
}
...