Я довольно новичок в игре microservice & RabbitMQ. Я пытаюсь создать новый API, используя. net Core 2.0
Следуя лучшим практикам для RabbitMQ, у меня должно быть одно соединение (или несколько, если я публикую sh и использую). Поэтому я создаю простой класс, создаю соединение и присоединяю его как синглтон.
public class RabbitMqService : IRabbitMqService, IDisposable
{
private readonly IConnection _connection;
public RabbitMqService(IConfiguration configuration)
{
_connection = new ConnectionFactory
{
Uri = new Uri($"amqp://{configuration.GetConnectionString("RabbitMQ")}")
}.CreateConnection();
}
public void Dispose()
{
_connection?.Close();
_connection?.Dispose();
}
public IConnection Connection => _connection;
}
И присоединяю его:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddApiVersioning();
services.AddSingleton<IRabbitMqService>(new RabbitMqService(Configuration));
}
Он работает, как и ожидалось. У меня такой вопрос:
У меня в микросервисе несколько контроллеров: один публикует сообщения, а другой публикует и потребляет (вызовы RP C).
Должен ли я создать новый канал для каждого контроллера? И как мне обрабатывать вызовы RP C в одном из контроллеров? если я делаю блокирующую коллекцию при ожидании ответа, как они делают в учебнике: https://www.rabbitmq.com/tutorials/tutorial-six-dotnet.html Затем я блокирую получение новых запросов в контроллере?
Кроме того, если я смотрю в своем полном примере RPCClient они называют их потреблять несколько раз, это правильный подход?
https://github.com/rabbitmq/rabbitmq-tutorials/blob/master/dotnet/RPCClient/RPCClient.cs