Libreria client SNS estesa Amazon per Java - Amazon Simple Notification Service

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à.

Libreria client SNS estesa Amazon per Java

Prerequisiti

Di seguito sono riportati i prerequisiti per l'utilizzo di Amazon SNS Extended Client Library for Java:

Configurazione dello storage dei messaggi

La libreria Amazon SNS Extended Client utilizza la Payload Offloading Java Common Library AWS per l'archiviazione e il recupero dei messaggi. Puoi configurare il seguente Amazon S3 Opzioni di archiviazione dei messaggi:

  • Soglia delle dimensioni dei messaggi personalizzati – I messaggi con payload e attributi che superano questa dimensione vengono memorizzati automaticamente in Amazon S3.

  • alwaysThroughS3 flag – Imposta questo valore su true per forzare lo storage di tutti i payload dei messaggi in Amazon S3. Per esempio:

    SNSExtendedClientConfiguration snsExtendedClientConfiguration = new SNSExtendedClientConfiguration() .withPayloadSupportEnabled(s3Client, BUCKET_NAME).withAlwaysThroughS3(true);
  • KMSChiave personalizzata: la chiave da utilizzare per la crittografia lato server nel bucket Amazon S3.

  • Nome del bucket – il nome del bucket Amazon S3 per la memorizzazione dei payload dei messaggi.

Esempio: pubblicazione di messaggi su Amazon SNS con payload archiviato in Amazon S3

L'esempio di codice seguente mostra come:

  • Creare una coda e un argomento di esempio.

  • Iscriviti alla coda per ricevere messaggi dall'argomento.

  • Pubblicare un messaggio di prova.

Il payload del messaggio è memorizzato in Amazon S3 e il riferimento ad esso è pubblicato. L'Amazon SQS Extended Client viene utilizzato per ricevere il messaggio.

SDKper Java 1.x
Nota

C'è di più su. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel Repository di esempi di codice AWS.

Per pubblicare un messaggio di grandi dimensioni, usa Amazon SNS Extended Client Library for Java. Il messaggio che invii fa riferimento a un oggetto Amazon S3 contenente il contenuto effettivo del messaggio.

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()); } }

Altri protocolli per endpoint

Entrambe le SQS librerie Amazon SNS e Amazon utilizzano la Payload Offloading Java Common Library per AWS archiviare e recuperare i payload dei messaggi con Amazon S3. Qualsiasi endpoint abilitato a Java (ad esempio, un HTTPS endpoint implementato in Java) può utilizzare la stessa libreria per eliminare il riferimento al contenuto del messaggio.

Gli endpoint che non possono utilizzare la Payload Offloading Java Common Library per AWS possono comunque pubblicare messaggi con payload archiviati in Amazon S3. Di seguito è illustrato un esempio di un riferimento di Amazon S3 pubblicato dall'esempio di codice sopra:

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