У меня есть работающее и запущенное приложение .NET 5. Существует REST API для данных POST. При публикации данных публикуется сообщение MassTransit. Используя AWS Explorer, я ясно вижу, что если тема с названием customerinfo.fifo не существует, он создан в Amazon моим приложением. Судя по всему, мое приложение делает что-то полезное с Amazon SQS / SNS. Мне нравится, что.
Что мне не нравится, так это то, что при добавлении проверки работоспособности появляется ошибка, из-за которой моя проверка работоспособности становится Нездоровой (после вызова http: // localhost: 5000 / health / ready). Этого не должно происходить, поскольку мое приложение работает нормально и может публиковать сообщения. По логике, нездоровый статус должен возникать только тогда, когда что-то не так. Вот мой код, отвечающий за проверку работоспособности. Это часть метода ConfigureServices
.
services.AddHealthChecks();
services.Configure<HealthCheckPublisherOptions>(options =>
{
options.Delay = TimeSpan.FromSeconds(2);
options.Predicate = (check) => check.Tags.Contains("ready");
});
Чтобы использовать добавленную проверку работоспособности, в метод Configure
добавляется следующий код.
app.UseEndpoints(endpoints =>
{
endpoints.MapHealthChecks("/health/ready", new HealthCheckOptions()
{
Predicate = (check) => check.Tags.Contains("ready"),
});
endpoints.MapHealthChecks("/health/live", new HealthCheckOptions());
});
Этот код, показанный выше, в основном таков, как он задокументирован в документации MassTransit а>. Кроме того, у меня также есть код для добавления самого MassTransit SQS. У меня есть специальный метод расширения для этого:
public static void UseMassTransit(this IServiceCollection services, MassTransitConfiguration massTransitConfiguration)
{
services.AddMassTransit(x =>
{
x.AddConsumer<CustomerChangeConsumer>();
x.UsingAmazonSqs((context, cfg) =>
{
cfg.Host(massTransitConfiguration.Host, h =>
{
h.AccessKey(massTransitConfiguration.AccessKey);
h.SecretKey(massTransitConfiguration.SecretKey);
h.EnableScopedTopics();
});
cfg.ReceiveEndpoint("CustomerChangeConsumer",
configurator =>
{
configurator.ConfigureConsumer<CustomerChangeConsumer>(context);
});
cfg.Message<CustomerUpdate>(x =>
{
x.SetEntityName("customerupdate.fifo");
});
cfg.Publish<CustomerUpdate>(x =>
{
x.TopicAttributes["FifoTopic"] = "true";
});
});
});
services.AddMassTransitHostedService();
}
Для решения этой проблемы возможны два типа решений:
- Просто удалите проверку работоспособности MassTransit. Он не может потерпеть неудачу, его больше нет. Мне нужно найти способ реализовать проверку работоспособности SQS / SNS при выборе такого решения.
- Исправить (мой?) Код, чтобы проверка работоспособности работала правильно.
Очевидно, что последний предпочтительнее, но для обоих типов решений я не знаю, как их реализовать.
Чтобы прояснить мою проблему, здесь показано зарегистрированное сообщение об ошибке при проверке работоспособности.
сбой: Microsoft.Extensions.Diagnostics.HealthChecks.DefaultHealthCheckService [103] Проверка работоспособности masstransit-bus завершена через 13,2985 мс со статусом «Неработоспособен» и описанием «Не готов: не запущен» MassTransit.AmazonSqsTransport.Exceptions.AmazonSqsConnectionException: https://support.microsoft.com/kb/ eu-west-2 / --- ›Amazon.SQS.AmazonSQSException: доступ к ресурсу https://sqs.eu-west-2.amazonaws.com/ отклонено. --- ›Amazon.Runtime.Internal.HttpErrorResponseException: создано исключение типа Amazon.Runtime.Internal.HttpErrorResponseException. в Amazon.Runtime.HttpWebRequestMessage.GetResponseAsync (CancellationToken cancellationToken) в Amazon.Runtime.Internal.HttpHandler
1.InvokeAsync[T](IExecutionContext executionContext) at Amazon.Runtime.Internal.Unmarshaller.InvokeAsync[T](IExecutionContext executionContext) at Amazon.SQS.Internal.ValidationResponseHandler.InvokeAsync[T](IExecutionContext executionContext) at Amazon.Runtime.Internal.ErrorHandler.InvokeAsync[T](IExecutionContext executionContext) --- End of inner exception stack trace --- at GreenPipes.Caching.Internals.NodeValueFactory
1.CreateValue () в GreenPipes.Caching.Internals.NodeTracker1.AddNode(INodeValueFactory
1, в стеке исключений MassValue, внутреннем траектории --- MassTracker1.AddNode(INodeValueFactory
1 в стеке исключений MassTracker. .ReceiveTransport1.ReceiveTransportAgent.RunTransport() at MassTransit.Transports.ReceiveTransport
1.ReceiveTransportAgent.Run ()
Я очень надеюсь, что там кто-нибудь сможет мне с этим помочь. Это так странно. MassTransit и SQS / SNS прекрасно работают вместе. Единственная проблема в том, что проверка работоспособности это отрицает, что очень расстраивает.
Health check masstransit-bus completed after 0.0497ms with status Unhealthy and 'Not ready: not started'
Я использую asp.net 3.1 с masstransit (sns / sqs) - person Niraj Trivedi   schedule 28.04.2021