Соединение RabbitMQ/MassTransit отклонено при запуске докераC#

Место общения программистов C#
Ответить
Anonymous
 Соединение RabbitMQ/MassTransit отклонено при запуске докера

Сообщение Anonymous »

Я пытаюсь запустить веб-приложение .NET 8, используя MassTransit для подключения к RabbitMQ.
Во время разработки я просто запустил файл docker-compose и вручную запустил приложение .NET. и это работает отлично, все службы внутри моего docker-compose запускаются правильно и проходят проверки работоспособности. Мне также удалось использовать их в локальном запущенном приложении.
Однако веб-приложение внутри docker-compose не работает и при запуске выдает следующую ошибку:

Код: Выделить всё

Connection Failed: rabbitmq://messaging:8085/ 
RabbitMQ.Client.Exceptions.BrokerUnreachableException: None of the specified endpoints were reachable
---> System.AggregateException: One or more errors occurred. (Connection failed)
---> RabbitMQ.Client.Exceptions.ConnectFailureException: Connection failed
---> System.Net.Sockets.SocketException (111): Connection refused
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
at System.Threading.Tasks.ValueTask.ValueTaskSourceAsTask.c.b__4_0(Object state)
Ниже приведены соответствующие части создания и настройки докера.

Код: Выделить всё

  messaging:
image: rabbitmq:management
container_name: messaging
hostname: messaging
restart: always
volumes:
- ./.container-data/queue/data:/var/lib/rabbitmq
- ./.container-data/queue/logs:/var/log/rabbitmq
ports:
- 8085:5672
- 8083:15672
environment:
RABBITMQ_DEFAULT_USER: quotable
RABBITMQ_DEFAULT_PASS: quotable
networks:
- quotable-network
healthcheck:
test: rabbitmq-diagnostics -q ping
interval: 5s
timeout: 15s
retries: 3

Код: Выделить всё

    internal static void AddAndConfigureMassTransit(this WebApplicationBuilder builder)
{
ArgumentNullException.ThrowIfNull(builder);

var config = builder.GetOrAddMassTransitConfig(ServiceCollectionOptions.Return);

builder.Services.AddMassTransit(massTransitConfig =>
{
massTransitConfig.SetKebabCaseEndpointNameFormatter();

massTransitConfig.AddAndConfigureConsumers();
massTransitConfig.AddAndConfigureSagas();

massTransitConfig.UsingRabbitMq((context, rabbitMqConfig) =>
{
rabbitMqConfig.Host(new Uri(config.Host), host =>
{
host.Username(config.UserName);
host.Password(config.Password);
});

rabbitMqConfig.UseInMemoryOutbox(context);

rabbitMqConfig.ConfigureEndpoints(context);
});
});
}
Конфигурация представляет собой пользовательскую запись:

Код: Выделить всё

public sealed record MassTransitConfig
{
required public string Address { get; init; }
required public int Port { get; init; }
required public string UserName { get; init; }
required public string Password { get; init; }
public string Host => $"amqp://{Address}:{Port}";
public string ConnectionString => $"amqp://{UserName}:{Password}@{Address}:{Port}";
}
Сначала я предположил, что у меня проблема с хостом, который по-прежнему направляет на localhost:8085, как и в локальной конфигурации, но нет, хост правильно указывает на message:8085.< /p>
Мои службы запущены и работают правильно, поскольку когда я запускаю веб-приложение локально, мои настройки приложения используют те же значения (за исключением переключения на локальный хост вместо имени контейнера).
Я предполагаю, что мне не хватает какой-то части конфигурации, необходимой для запуска приложения в Docker, но, просматривая ее в течение дня, я не смог в этом разобраться.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ing-docker
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»