Во время разработки я просто запустил файл 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}";
}
Мои службы запущены и работают правильно, поскольку когда я запускаю веб-приложение локально, мои настройки приложения используют те же значения (за исключением переключения на локальный хост вместо имени контейнера).
Я предполагаю, что мне не хватает какой-то части конфигурации, необходимой для запуска приложения в Docker, но, просматривая ее в течение дня, я не смог в этом разобраться.
Подробнее здесь: https://stackoverflow.com/questions/791 ... ing-docker
Мобильная версия