Как настроить потребитель MassTransit в AWS Lambda с Sqs правильноC#

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

Сообщение Anonymous »

Что
Я пытаюсь правильно создать потребителя MassTransit в функции AWS Lambda. /> У меня есть это работа, но мне пришлось вручную добавить триггер SQS в консоли AWS - см. Скриншот. < /p>
  • это как должно быть? Чтобы вручную добавить триггер SQS? Обычно я ожидаю, что это будет _error очередь, как описано в Docs Exceptions MassTransit
Настройка и код
Вот скриншот триггера SQS, добавленный в консоли AWS:

Вот фрагмент кода, который в значительной степени основан на примере MassTransit в GitHub
Функция лямбда: < /p>

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

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>
Потребитель: < /p>
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);

return Task.CompletedTask;
}
}
Я попытался настроить это как приложение .NET Console, и все работает, как и ожидалось, с MassTransit, собирающим правильную очередь и размещение сообщений в очередь _error для любого Исключения без необходимости явного создания очередей. < /p>
Я также настроил потребителя, как описано в: https://github.com/masstransit/masstran ... t-99388773
образно -Верд ">var factory = scope.ServiceProvider.GetRequiredService();

var ep = factory.CreateConsumerReceiver("static-name");
< /code>
Не уверен, что это имеет значение, но это единственный способ, которым я работаю в дополнение к ручному добавлению триггера SQS. < /p>
Я что -то упускаю ? Или настроить что -то неправильно?>

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

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

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

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

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

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

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