aws-sdk-java-v2-messaging
giuseppe-trisciuoglio/developer-kit
提供使用 AWS SDK for Java 2.x 針對 SQS 佇列和 SNS 主題的 AWS 訊息傳遞模式。支援訊息的傳送與接收、FIFO 佇列、DLQ、訂閱以及發佈/訂閱模式。在實作 SQS 或 SNS 訊息傳遞時請使用此範例。
...展開全部關於aws-sdk-java-v2-messaging
aws-sdk-java-v2-messaging 是一份開發者參考指南,旨在說明如何使用 AWS SDK for Java 2.x 實作 AWS 訊息傳遞功能,內容涵蓋 Amazon SQS 佇列與 Amazon SNS 主題。 本文件透過整合符合程式設計慣例的客戶端設定與訊息操作模式,並提供可執行的程式碼,解決了在 Java 服務中正確串接產生者、消費者及發佈/訂閱流程的問題,讓開發事件驅動系統的工程師無需從零散的文件中重新拼湊這些內容。
SKILL.md 及其參考檔案示範了客戶端配置(使用 DefaultCredentialsProvider 和區域的 SqsClient/SnsClient 建構器)、SQS 操作(建立佇列、傳送、透過長輪詢接收、透過收據處理程序刪除)、 具備內容型去重與訊息群組 ID 的 FIFO 佇列、SNS 操作(建立話題、帶有主題與訊息屬性的發佈、FIFO 發佈),以及 SNS 至 SQS/電子郵件/Lambda 的訂閱。 此外,該專案還展示了 Spring Boot 整合(包含注入式客戶端及基於配置的主題 ARN),並介紹了進階功能,例如死信佇列、批次操作、可見性超時,以及針對超過 256KB 的訊息使用 S3 儲存。 隨附的參考資料涵蓋詳細的 SQS 與 SNS 操作、Spring Boot 整合,以及連結至 AWS 官方文件與範例儲存庫。
本指南針對在 AWS 上建置訊息緩衝、發佈/訂閱(pub/sub)及事件驅動架構的 Java 後端開發人員,特別是使用 Spring Boot 的開發者。憑證透過 SDK 的標準 DefaultCredentialsProvider 進行處理,而非硬編碼的機密資訊,且所有展示的操作皆為一般的應用程式層級訊息傳遞呼叫。
常見問題
本指南涵蓋哪些 AWS 服務?
使用 AWS SDK for Java 2.x 的 Amazon SQS(標準與 FIFO 佇列、DLQ、長輪詢)以及 Amazon SNS(主題、發佈,以及對 SQS、電子郵件和 Lambda 的訂閱)。
憑證如何處理?
客戶端採用 DefaultCredentialsProvider 並指定明確的區域,仰賴標準的 AWS 憑證鏈,而非在技能中硬編碼金鑰。
是否支援 Spring Boot?
是的 — 其中包含 Spring Boot 整合範例,其中 SnsClient/ObjectMapper 已透過 @Value 配置注入,並透過 @Value 配置提供主題 ARN,此外還提供專用的 spring-boot-integration 參考檔案。
它能否處理 FIFO 排序與去重?
是的。它展示了具備內容型去重功能的 FIFO 佇列與主題建立方式,並搭配訊息群組 ID 和去重 ID,以實現有序且「精確一次」風格的傳遞。
至於大型訊息或失敗訊息呢?
參考文件中說明,對於大於 256KB 的訊息,應使用 S3 儲存;並配置死信佇列、可見性超時及批次操作,以確保處理的可靠性。
所有檔案
5 個檔案references/detailed-sns-operations.md 5.1KB 檢視references/aws-official-documentation.md5.2KB 檢視 references/detailed-sqs-operations.md 6.0KB 檢視 references/spring-boot-integration.md 7.7KB 檢視 SKILL.md 7.2 KB 檢視Overview
Provides patterns for SQS queues and SNS topics with AWS SDK for Java 2.x: client setup, queue management, message operations, subscriptions, and Spring Boot integration.
When to Use
- Setting up SQS queues (standard or FIFO) for message buffering
- Implementing pub/sub with SNS topics and subscriptions
- Processing messages from SQS queues with long polling
- Configuring dead letter queues (DLQ) for error handling
- Integrating AWS messaging with Spring Boot applications
- Building event-driven architectures with SQS/SNS
Examples
Quick Setup
Dependencies:
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>sqs</artifactId></dependency><dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>sns</artifactId></dependency>
Client Configuration:
SqsClient sqsClient = SqsClient.builder() .region(Region.US_EAST_1) .credentialsProvider(DefaultCredentialsProvider.create()) .build();SnsClient snsClient = SnsClient.builder() .region(Region.US_EAST_1) .build();
SQS Operations
Create and Send Message:
String queueUrl = sqsClient.createQueue(CreateQueueRequest.builder() .queueName("my-queue") .build()).queueUrl();String messageId = sqsClient.sendMessage(SendMessageRequest.builder() .queueUrl(queueUrl) .messageBody("Hello, SQS!") .build()).messageId();
Receive and Delete Message:
ReceiveMessageResponse response = sqsClient.receiveMessage(ReceiveMessageRequest.builder() .queueUrl(queueUrl) .maxNumberOfMessages(10) .waitTimeSeconds(20) .build());response.messages().forEach(message -> { processMessage(message.body()); sqsClient.deleteMessage(DeleteMessageRequest.builder() .queueUrl(queueUrl) .receiptHandle(message.receiptHandle()) .build());});
FIFO Queue:
Map<QueueAttributeName, String> attributes = Map.of( QueueAttributeName.FIFO_QUEUE, "true", QueueAttributeName.CONTENT_BASED_DEDUPLICATION, "true");String fifoQueueUrl = sqsClient.createQueue(CreateQueueRequest.builder() .queueName("my-queue.fifo") .attributes(attributes) .build()).queueUrl();sqsClient.sendMessage(SendMessageRequest.builder() .queueUrl(fifoQueueUrl) .messageBody("Order #12345") .messageGroupId("orders") .messageDeduplicationId(UUID.randomUUID().toString()) .build());
SNS Operations
Create Topic and Publish:
String topicArn = snsClient.createTopic(CreateTopicRequest.builder() .name("my-topic") .build()).topicArn();snsClient.publish(PublishRequest.builder() .topicArn(topicArn) .subject("Test Notification") .message("Hello, SNS!") .build());
SNS to SQS Subscription:
String queueArn = sqsClient.getQueueAttributes(GetQueueAttributesRequest.builder() .queueUrl(queueUrl) .attributeNames(QueueAttributeName.QUEUE_ARN) .build()).attributes().get(QueueAttributeName.QUEUE_ARN);snsClient.subscribe(SubscribeRequest.builder() .protocol("sqs") .endpoint(queueArn) .topicArn(topicArn) .build());
Spring Boot Integration
@Service@RequiredArgsConstructorpublic class OrderNotificationService { private final SnsClient snsClient; private final ObjectMapper objectMapper; @Value("${aws.sns.order-topic-arn}") private String orderTopicArn; public void sendOrderNotification(Order order) throws JsonProcessingException { snsClient.publish(PublishRequest.builder() .topicArn(orderTopicArn) .subject("New Order Received") .message(objectMapper.writeValueAsString(order)) .messageAttributes(Map.of( "orderType", MessageAttributeValue.builder() .dataType("String") .stringValue(order.getType()) .build())) .build()); }}
Instructions
Implement Message Processing (with Validation)
- Create queues/topics with appropriate configuration
- Send messages and validate
messageIdis returned - Receive messages with long polling (
waitTimeSeconds: 20) - Process messages - validate payload before processing
- Delete messages only after successful processing - verify deletion response
- Check DLQ periodically for failed messages using
redrivePolicy - Verify delivery - monitor CloudWatch
NumberOfMessagesSentmetric
Validation Checklist:
// After sendif (messageId == null || messageId.isEmpty()) { throw new MessagingException("Message send failed - no messageId returned");}// After receiveif (response.messages().isEmpty()) { log.debug("No messages available - normal with long polling");}// After deleteif (!deleteResponse.sdkHttpResponse().isSuccessful()) { throw new MessagingException("Message deletion failed");}
Setup Credentials
export AWS_ACCESS_KEY_ID=your-access-keyexport AWS_SECRET_ACCESS_KEY=your-secret-keyexport AWS_REGION=us-east-1
Monitor and Debug
- CloudWatch metrics:
ApproximateNumberOfMessages,NumberOfMessagesSent,NumberOfMessagesReceived - Enable SDK logging:
software.amazon.awssdkat DEBUG level - Use X-Ray for distributed tracing
Best Practices
SQS:
- Use long polling (20-40s) to reduce empty responses and costs
- Always delete messages after successful processing
- Implement idempotent processing for duplicate handling
- Configure DLQ (
redrivePolicy) for failed messages - Use FIFO queues when order matters (300 msg/sec limit)
SNS:
- Use filter policies to reduce unnecessary deliveries
- Keep messages under 256KB
- Implement retry with exponential backoff
- Monitor
NumberOfNotificationFailedmetric
General:
- Use IAM roles over static credentials
- Reuse clients (they are thread-safe)
- Test with LocalStack or Testcontainers
Detailed References
- references/detailed-sqs-operations.md
- references/detailed-sns-operations.md
- references/spring-boot-integration.md
- references/aws-official-documentation.md
Constraints and Warnings
- Message Size: Maximum 256KB for SQS and SNS
- Visibility Timeout: Undeleted messages reappear after timeout - always delete after processing
- Input Validation: Sanitize message body before processing - messages may contain untrusted payloads
- FIFO Naming: Must end with
.fifosuffix - FIFO Throughput: 300 msg/sec per queue (use partitioning for higher throughput)
- Message Retention: SQS retains messages max 14 days
- DLQ Required: Configure dead letter queue to prevent message loss
- Region-Specific: SQS queues are region-specific; cross-region requires SNS
所有檔案
0 個檔案安裝 aws-sdk-java-v2-messaging
請下載並將技能檔案解壓縮至您的 .claude/skills/ 目錄中。
下載 ZIP複製儲存庫並將技能檔案複製到您的專案中。
git clone https://github.com/giuseppe-trisciuoglio/developer-kit/blob/main/plugins/developer-kit-java/skills/aws-sdk-java-v2-messaging/SKILL.md # Copy SKILL.md to your .claude/skills/ directory
複製





首頁
