Bibliothèque client étendue pour Java - Amazon Simple Notification Service

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.

Bibliothèque client étendue pour Java

Prérequis

Les conditions préalables à l'utilisation de la bibliothèque client Amazon SNS Extended pour Java sont les suivantes :

  • Un AWS SDK.

    L'exemple de cette page utilise le AWS langage JavaSDK. Pour installer et configurer leSDK, voir Configurer le AWS SDK pour Java dans le Guide du AWS SDK for Java développeur.

  • Et Compte AWS avec les informations d'identification appropriées.

    Pour créer un Compte AWS, accédez à la page d'AWS accueil, puis choisissez Créer un AWS compte. Suivez les instructions à l’écran.

    Pour plus d'informations sur les informations d'identification, voir Configurer les AWS informations d'identification et la région pour le développement dans le guide du AWS SDK for Java développeur.

  • Java 8 ou une version ultérieure.

  • La bibliothèque client Amazon SNS Extended pour Java (également disponible auprès de Maven).

Configurer le stockage de messages

La bibliothèque Amazon SNS Extended Client utilise la bibliothèque commune Java Payload Offloading AWS pour le stockage et la récupération des messages. Vous pouvez configurer les options de stockage de messages suivantes pour Amazon S3 :

  • Seuil personnalisé de tailles de messages – les messages dont les charges utiles et les attributs dépassent cette taille sont automatiquement stockés dans Amazon S3.

  • Drapeau alwaysThroughS3 – Définissez cette valeur sur true pour forcer le stockage de toutes les charges utiles de messages dans Amazon S3. Par exemple :

    SNSExtendedClientConfiguration snsExtendedClientConfiguration = new SNSExtendedClientConfiguration() .withPayloadSupportEnabled(s3Client, BUCKET_NAME).withAlwaysThroughS3(true);
  • KMSClé personnalisée : clé à utiliser pour le chiffrement côté serveur dans votre compartiment Amazon S3.

  • Nom du compartiment – Nom du compartiment Amazon S3 où stocker les charges utiles de messages.

Exemple : publication de messages sur Amazon SNS avec une charge utile stockée dans Amazon S3

L’exemple de code suivant illustre comment :

  • Créez un exemple de rubrique et de file d'attente.

  • Abonnez la file d'attente pour recevoir des messages de la rubrique.

  • Publiez un message de test.

La charge utile du message est stockée dans Amazon S3 et sa référence est publiée. Le client Amazon SQS Extended est utilisé pour recevoir le message.

SDKpour Java 1.x
Note

Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS.

Pour publier un message volumineux, utilisez la bibliothèque client Amazon SNS Extended pour Java. Le message que vous envoyez fait référence à un objet Amazon S3 contenant le contenu réel du message.

import com.amazon.sqs.javamessaging.AmazonSQSExtendedClient; import com.amazon.sqs.javamessaging.ExtendedClientConfiguration; import com.amazonaws.regions.Region; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.sns.AmazonSNS; import com.amazonaws.services.sns.AmazonSNSClientBuilder; import com.amazonaws.services.sns.model.CreateTopicRequest; import com.amazonaws.services.sns.model.PublishRequest; import com.amazonaws.services.sns.model.SetSubscriptionAttributesRequest; import com.amazonaws.services.sns.util.Topics; import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClientBuilder; import com.amazonaws.services.sqs.model.CreateQueueRequest; import com.amazonaws.services.sqs.model.ReceiveMessageResult; import software.amazon.sns.AmazonSNSExtendedClient; import software.amazon.sns.SNSExtendedClientConfiguration; public class Example { public static void main(String[] args) { final String BUCKET_NAME = "extended-client-bucket"; final String TOPIC_NAME = "extended-client-topic"; final String QUEUE_NAME = "extended-client-queue"; final Regions region = Regions.DEFAULT_REGION; // Message threshold controls the maximum message size that will be allowed to // be published // through SNS using the extended client. Payload of messages exceeding this // value will be stored in // S3. The default value of this parameter is 256 KB which is the maximum // message size in SNS (and SQS). final int EXTENDED_STORAGE_MESSAGE_SIZE_THRESHOLD = 32; // Initialize SNS, SQS and S3 clients final AmazonSNS snsClient = AmazonSNSClientBuilder.standard().withRegion(region).build(); final AmazonSQS sqsClient = AmazonSQSClientBuilder.standard().withRegion(region).build(); final AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion(region).build(); // Create bucket, topic, queue and subscription s3Client.createBucket(BUCKET_NAME); final String topicArn = snsClient.createTopic( new CreateTopicRequest().withName(TOPIC_NAME)).getTopicArn(); final String queueUrl = sqsClient.createQueue( new CreateQueueRequest().withQueueName(QUEUE_NAME)).getQueueUrl(); final String subscriptionArn = Topics.subscribeQueue( snsClient, sqsClient, topicArn, queueUrl); // To read message content stored in S3 transparently through SQS extended // client, // set the RawMessageDelivery subscription attribute to TRUE final SetSubscriptionAttributesRequest subscriptionAttributesRequest = new SetSubscriptionAttributesRequest(); subscriptionAttributesRequest.setSubscriptionArn(subscriptionArn); subscriptionAttributesRequest.setAttributeName("RawMessageDelivery"); subscriptionAttributesRequest.setAttributeValue("TRUE"); snsClient.setSubscriptionAttributes(subscriptionAttributesRequest); // Initialize SNS extended client // PayloadSizeThreshold triggers message content storage in S3 when the // threshold is exceeded // To store all messages content in S3, use AlwaysThroughS3 flag final SNSExtendedClientConfiguration snsExtendedClientConfiguration = new SNSExtendedClientConfiguration() .withPayloadSupportEnabled(s3Client, BUCKET_NAME) .withPayloadSizeThreshold(EXTENDED_STORAGE_MESSAGE_SIZE_THRESHOLD); final AmazonSNSExtendedClient snsExtendedClient = new AmazonSNSExtendedClient(snsClient, snsExtendedClientConfiguration); // Publish message via SNS with storage in S3 final String message = "This message is stored in S3 as it exceeds the threshold of 32 bytes set above."; snsExtendedClient.publish(topicArn, message); // Initialize SQS extended client final ExtendedClientConfiguration sqsExtendedClientConfiguration = new ExtendedClientConfiguration() .withPayloadSupportEnabled(s3Client, BUCKET_NAME); final AmazonSQSExtendedClient sqsExtendedClient = new AmazonSQSExtendedClient(sqsClient, sqsExtendedClientConfiguration); // Read the message from the queue final ReceiveMessageResult result = sqsExtendedClient.receiveMessage(queueUrl); System.out.println("Received message is " + result.getMessages().get(0).getBody()); } }

Autres protocoles de point de terminaison

Les SQS bibliothèques Amazon SNS et Amazon utilisent la bibliothèque commune Java Payload Offloading pour AWS stocker et récupérer les charges utiles des messages avec Amazon S3. Tout point de terminaison compatible Java (par exemple, un HTTPS point de terminaison implémenté en Java) peut utiliser la même bibliothèque pour déréférencer le contenu du message.

Les points de terminaison qui ne peuvent pas utiliser la bibliothèque commune Java de déchargement de charge utile AWS peuvent toujours publier des messages avec des charges utiles stockées dans Amazon S3. Voici un exemple de référence Amazon S3 qui est publiée par l'exemple de code ci-dessus :

[ "software.amazon.payloadoffloading.PayloadS3Pointer", { "s3BucketName": "extended-client-bucket", "s3Key": "xxxx-xxxxx-xxxxx-xxxxxx" } ]