Consuma messaggi con il AWS Message Processing Framework for .NET - AWS SDK for .NET

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Consuma messaggi con il AWS Message Processing Framework for .NET

Questa è la documentazione preliminare per una funzionalità della versione di anteprima. ed è soggetta a modifiche.

Il AWS Message Processing Framework for .NET consente di utilizzare i messaggi che sono stati pubblicati utilizzando il framework o uno dei servizi di messaggistica. I messaggi possono essere utilizzati in diversi modi, alcuni dei quali sono descritti di seguito.

Gestori di messaggi

Per utilizzare i messaggi, implementa un gestore di messaggi utilizzando l'IMessageHandlerinterfaccia per ogni tipo di messaggio che desideri elaborare. La mappatura tra tipi di messaggi e gestori di messaggi viene configurata all'avvio del progetto.

await Host.CreateDefaultBuilder(args) .ConfigureServices(services => { // Register the AWS Message Processing Framework for .NET services.AddAWSMessageBus(builder => { // Register an SQS Queue that the framework will poll for messages. // NOTE: The URL given below is an example. Use the appropriate URL for your SQS Queue. builder.AddSQSPoller("https://sqs.us-west-2.amazonaws.com/012345678910/MyAppProd"); // Register all IMessageHandler implementations with the message type they should process. // Here messages that match our ChatMessage .NET type will be handled by our ChatMessageHandler builder.AddMessageHandler<ChatMessageHandler, ChatMessage>(); }); }) .Build() .RunAsync();

Il codice seguente mostra un esempio di gestore di messaggi per un messaggio. ChatMessage

public class ChatMessageHandler : IMessageHandler<ChatMessage> { public Task<MessageProcessStatus> HandleAsync(MessageEnvelope<ChatMessage> messageEnvelope, CancellationToken token = default) { // Add business and validation logic here. if (messageEnvelope == null) { return Task.FromResult(MessageProcessStatus.Failed()); } if (messageEnvelope.Message == null) { return Task.FromResult(MessageProcessStatus.Failed()); } ChatMessage message = messageEnvelope.Message; Console.WriteLine($"Message Description: {message.MessageDescription}"); // Return success so the framework will delete the message from the queue. return Task.FromResult(MessageProcessStatus.Success()); } }

L'esterno MessageEnvelope contiene i metadati utilizzati dal framework. messageLa sua proprietà è il tipo di messaggio (in questo casoChatMessage).

Puoi tornare MessageProcessStatus.Success() a indicare che il messaggio è stato elaborato correttamente e il framework eliminerà il messaggio dalla coda di Amazon SQS. Al momento della restituzioneMessageProcessStatus.Failed(), il messaggio rimarrà in coda dove potrà essere nuovamente elaborato o spostato in una coda di lettere morte, se configurato.

Gestione dei messaggi in un processo di lunga durata

Puoi chiamare AddSQSPoller con un URL di coda SQS per avviare un processo di lunga durata BackgroundServiceche esegua il polling continuo della coda ed elabori i messaggi.

await Host.CreateDefaultBuilder(args) .ConfigureServices(services => { // Register the AWS Message Processing Framework for .NET services.AddAWSMessageBus(builder => { // Register an SQS Queue that the framework will poll for messages. // NOTE: The URL given below is an example. Use the appropriate URL for your SQS Queue. builder.AddSQSPoller("https://sqs.us-west-2.amazonaws.com/012345678910/MyAppProd", options => { // The maximum number of messages from this queue that the framework will process concurrently on this client. options.MaxNumberOfConcurrentMessages = 10; // The duration each call to SQS will wait for new messages. options.WaitTimeSeconds = 20; }); // Register all IMessageHandler implementations with the message type they should process. builder.AddMessageHandler<ChatMessageHandler, ChatMessage>(); }); }) .Build() .RunAsync();

Configurazione di SQS Message Poller

Il poller dei messaggi SQS può essere configurato da when call. SQSMessagePollerOptions AddSQSPoller

  • MaxNumberOfConcurrentMessages- Il numero massimo di messaggi dalla coda da elaborare contemporaneamente. Il valore predefinito è 10.

  • WaitTimeSeconds- La durata (in secondi) per cui la chiamata ReceiveMessage SQS attende l'arrivo di un messaggio nella coda prima di tornare. Se un messaggio è disponibile, la chiamata ritorna prima del. WaitTimeSeconds Il valore predefinito è 20.

Gestione del timeout di visibilità dei messaggi

I messaggi SQS hanno un periodo di timeout di visibilità. Quando un consumatore inizia a gestire un determinato messaggio, questo rimane in coda ma viene nascosto agli altri consumatori per evitare di elaborarlo più di una volta. Se il messaggio non viene gestito ed eliminato prima di diventare nuovamente visibile, un altro consumatore potrebbe tentare di gestire lo stesso messaggio.

Il framework traccerà e tenterà di estendere il timeout di visibilità per i messaggi che sta attualmente gestendo. È possibile configurare questo comportamento su SQSMessagePollerOptions when callAddSQSPoller.

  • VisibilityTimeout- La durata in secondi in cui i messaggi ricevuti vengono nascosti alle successive richieste di recupero. Il valore predefinito è 30.

  • VisibilityTimeoutExtensionThreshold- Quando il timeout di visibilità di un messaggio rientra in questo numero di secondi dalla scadenza, il framework prolungherà il timeout di visibilità (di altri secondi). VisibilityTimeout Il valore predefinito è 5.

  • VisibilityTimeoutExtensionHeartbeatInterval- Con quale frequenza, in secondi, il framework verificherà la presenza di messaggi che mancano pochi VisibilityTimeoutExtensionThreshold secondi alla scadenza e quindi ne estenderà il timeout di visibilità. Il valore predefinito è 1.

Nell'esempio seguente, il framework controllerà ogni secondo i messaggi che sono ancora in fase di gestione. Per quei messaggi entro 5 secondi dalla loro nuova visibilità, il framework prolungherà automaticamente il timeout di visibilità di ogni messaggio di altri 30 secondi.

// NOTE: The URL given below is an example. Use the appropriate URL for your SQS Queue. builder.AddSQSPoller("https://sqs.us-west-2.amazonaws.com/012345678910/MyAppProd", options => { options.VisibilityTimeout = 30; options.VisibilityTimeoutExtensionThreshold = 5; VisibilityTimeoutExtensionHeartbeatInterval = 1; });

Gestione dei messaggi nelle funzioni AWS Lambda

Puoi utilizzare il AWS Message Processing Framework per .NET con l'integrazione di SQS con Lambda. Questo è fornito dal pacchetto. AWS.Messaging.Lambda Consulta il suo README per iniziare.