Masstransit in AWS Lambda SQS stellt keine Nachricht in die Fehlerwarteschlange in der Ausnahme einC#

Ein Treffpunkt für C#-Programmierer
Guest
 Masstransit in AWS Lambda SQS stellt keine Nachricht in die Fehlerwarteschlange in der Ausnahme ein

Post by Guest »

Das Was < /h2>
Beim Erstellen eines Massstransit -Verbrauchers in einer AWS -Lambda -Funktion. In einer Ausnahme scheint Masstransit die Nachricht nicht auf die _error -Tharte zu setzen, wie in den Masstransit -Ausnahmen beschrieben. Hier ist ein Ausschnitt des Codes, der auf dem Masstransit -Beispiel in GitHub < /p>
der Lambda basiert Funktion: < /p>

Code: Select all

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>
Der Verbraucher, in dem ich eine Ausnahme manuell erzwinge.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"); //
Für eine Ausnahme hätte ich also einen neuen _error < /code> wie SO erwartet:
 < /p>
Und ich sehe meine Ausnahme in den Fehlerprotokollen:

Eine andere Notiz ist, dass dieser Verbraucher zum Empfangen von Nachrichten das Empfangen von Nachrichten dazu gebracht wird, Nachrichten zu empfangen Ich musste den SQS -Trigger manuell in die AWS -Konsole hinzufügen (nicht sicher, ob das einen Unterschied macht) < /p>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post