Я хотел бы использовать инфраструктуру очереди сообщений, такую как 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);
}