RabbitMQ RP C Звонки. Net Базовый API - PullRequest
0 голосов
/ 16 марта 2020

Я довольно новичок в игре 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...