MassTransit в AWS Lambda SQS не помещает сообщение в очередь ошибок на исключениеC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 MassTransit в AWS Lambda SQS не помещает сообщение в очередь ошибок на исключение

Сообщение Anonymous »

Что < /h2>
При создании потребителя MassTransit в функции AWS Lambda. В качестве исключения MassTransit, похоже, не помещает сообщение в очередь _error , как описано в документах MassTransit Exceptions
Настройка и код
Вот фрагмент кода, который основан на примере MassTransit в GitHub
Функция лямбда:

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

public Function()
{
_environment = Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? "production";

var services = LambdaConfiguration.ConfigureServices(_cache);

_provider = services.BuildServiceProvider(true);
}

public async Task FunctionHandler(SQSEvent input, ILambdaContext context)
{
using var cts = new CancellationTokenSource(context.RemainingTime);
using var scope = _provider.CreateScope();

var factory = scope.ServiceProvider.GetRequiredService();

var ep = factory.CreateConsumerReceiver("static-name");

var logger = scope.ServiceProvider.GetRequiredService();

logger.LogInformation("Lambda function handler executed {@Environment}", _environment);

var headers = new Dictionary();
try
{
foreach (var record in input.Records)
{
foreach (var key in record!.Attributes!.Keys)
headers[key] = record.Attributes[key];

foreach (var key in record!.MessageAttributes!.Keys)
headers[key] = record.MessageAttributes[key];

logger.LogInformation("Message received {Body}", record.Body);

var body = Encoding.UTF8.GetBytes(record.Body);

await ep.Dispatch(body, headers, cts.Token);
}
}
catch (Exception ex)
{
logger.LogError(ex, "Error while processing message");
throw;
}

finally
{
await Log.CloseAndFlushAsync();
}
}
< /code>
Потребитель, в котором я вручную заставляю исключение.public class HandleVehicleTelemetryConsumer : IConsumer
{
private readonly ILogger _logger;

public HandleVehicleTelemetryConsumer(ILogger logger)
{
_logger = logger;
}

public Task Consume(ConsumeContext context)
{
_logger.LogInformation("Message received {@MessageId}", context.MessageId);

throw new Exception("Something bad happened"); //
Итак, для исключения я бы ожидал, что новый _error < /code> создан таким образом:
 < /p>
И я вижу свое исключение в журналах ошибок:

Другое примечание заключается в том, что для того, чтобы этот потребитель получил сообщения, я должен был Вручную добавьте триггер SQS в консоли AWS (не уверен, что это имеет значение) < /p>
 
Я попытался настроить это как приложение .net Console, и все работает, как и ожидалось с MassTransit, собирая правильную очередь и размещение сообщений в очередь _error 
для любых исключений без необходимости явно создавая очередь.
Но для настройки AWS Lambda это, похоже, не работает? Я что -то упускаю?

Подробнее здесь: https://stackoverflow.com/questions/794 ... -exception
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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