Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Consommez des messages avec le AWS cadre de traitement des messages pour. NET
Il s'agit de la documentation d'avant-première d'une fonctionnalité en version préliminaire. Elle est susceptible d’être modifiée. |
Le cadre de traitement des AWS messages pour. NETvous permet de consommer des messages publiés à l'aide du framework ou de l'un des services de messagerie. Les messages peuvent être consommés de différentes manières, dont certaines sont décrites ci-dessous.
Gestionnaires de messages
Pour consommer des messages, implémentez un gestionnaire de messages utilisant l'IMessageHandler
interface pour chaque type de message que vous souhaitez traiter. Le mappage entre les types de messages et les gestionnaires de messages est configuré au démarrage du projet.
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();
Le code suivant montre un exemple de gestionnaire de messages pour un ChatMessage
message.
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'extérieur MessageEnvelope
contient les métadonnées utilisées par le framework. Sa message
propriété est le type de message (dans ce casChatMessage
).
Vous pouvez revenir MessageProcessStatus.Success()
pour indiquer que le message a été traité avec succès et que le framework supprimera le message de la SQS file d'attente Amazon. Au retourMessageProcessStatus.Failed()
, le message restera dans la file d'attente où il pourra être traité à nouveau ou déplacé vers une file d'attente contenant des lettres mortes, si cela est configuré.
Gestion des messages dans le cadre d'un processus de longue haleine
Vous pouvez appeler AddSQSPoller
avec une SQS file d'attente URL pour démarrer une longue série BackgroundService
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();
Configuration du SQS message Poller
Le sondeur de SQS messages peut être configuré par le SQSMessagePollerOptions
lors de l'appelAddSQSPoller
.
-
MaxNumberOfConcurrentMessages
- Le nombre maximum de messages de la file d'attente à traiter simultanément. La valeur par défaut est 10. -
WaitTimeSeconds
- Durée (en secondes) pendant laquelle l'ReceiveMessage
SQSappel attend qu'un message arrive dans la file d'attente avant de revenir. Si un message est disponible, l'appel revient plus tôt que prévuWaitTimeSeconds
. La valeur par défaut est 20.
Gestion des délais de visibilité des messages
SQSles messages ont un délai d'expiration de visibilité. Lorsqu'un client commence à traiter un message donné, celui-ci reste dans la file d'attente, mais il est caché aux autres consommateurs pour éviter de le traiter plusieurs fois. Si le message n'est pas traité et supprimé avant de redevenir visible, un autre consommateur peut tenter de traiter le même message.
Le framework suivra et tentera de prolonger le délai de visibilité pour les messages qu'il gère actuellement. Vous pouvez configurer ce comportement SQSMessagePollerOptions
lors de l'appelAddSQSPoller
.
-
VisibilityTimeout
- Durée en secondes pendant laquelle les messages reçus sont masqués lors des demandes de récupération ultérieures. La valeur par défaut est 30. -
VisibilityTimeoutExtensionThreshold
- Lorsque le délai de visibilité d'un message est inférieur à ce nombre de secondes après son expiration, le cadre prolonge le délai de visibilité (de quelques secondes supplémentairesVisibilityTimeout
). La valeur par défaut est 5. -
VisibilityTimeoutExtensionHeartbeatInterval
- Fréquence en secondes à laquelle le framework vérifiera les messages arrivés à expiration dans lesVisibilityTimeoutExtensionThreshold
secondes qui suivent leur expiration, puis prolongera leur délai de visibilité. La valeur par défaut est 1.
Dans l'exemple suivant, le framework vérifiera toutes les secondes les messages toujours en cours de traitement. Pour les messages redevenus visibles 5 secondes, le framework prolongera automatiquement le délai de visibilité de chaque message de 30 secondes supplémentaires.
// 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; });
Gestion des messages dans les AWS Lambda fonctions
Vous pouvez utiliser le cadre de traitement des AWS messages pour. NETavec SQSintégration avec Lambda. Ceci est fourni par le AWS.Messaging.Lambda
package. Reportez-vous README