158 lines
5.2 KiB
Markdown
158 lines
5.2 KiB
Markdown
# AWS SQS & SNS Official Documentation Reference
|
|
|
|
This file contains reference information extracted from official AWS resources for the AWS SDK for Java 2.x messaging patterns.
|
|
|
|
## Source Documents
|
|
- [AWS Java SDK v2 Examples - SQS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sqs)
|
|
- [AWS Java SDK v2 Examples - SNS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns)
|
|
- [AWS SQS Developer Guide](https://docs.aws.amazon.com/sqs/latest/dg/)
|
|
- [AWS SNS Developer Guide](https://docs.aws.amazon.com/sns/latest/dg/)
|
|
|
|
## Amazon SQS Reference
|
|
|
|
### Core Operations
|
|
- **CreateQueue** - Create new SQS queue
|
|
- **DeleteMessage** - Delete individual message from queue
|
|
- **ListQueues** - List available queues
|
|
- **ReceiveMessage** - Receive messages from queue
|
|
- **SendMessage** - Send message to queue
|
|
- **SendMessageBatch** - Send multiple messages to queue
|
|
|
|
### Advanced Features
|
|
- **Large Message Handling** - Use S3 for messages larger than 256KB
|
|
- **Batch Operations** - Process multiple messages efficiently
|
|
- **Long Polling** - Reduce empty responses with `waitTimeSeconds`
|
|
- **Visibility Timeout** - Control message visibility during processing
|
|
- **Dead Letter Queues (DLQ)** - Handle failed messages
|
|
- **FIFO Queues** - Ensure message ordering and deduplication
|
|
|
|
### Java SDK v2 Key Classes
|
|
```java
|
|
// Core clients and models
|
|
software.amazon.awssdk.services.sqs.SqsClient
|
|
software.amazon.awssdk.services.sqs.model.*
|
|
software.amazon.awssdk.services.sqs.model.QueueAttributeName
|
|
```
|
|
|
|
## Amazon SNS Reference
|
|
|
|
### Core Operations
|
|
- **CreateTopic** - Create new SNS topic
|
|
- **Publish** - Send message to topic
|
|
- **Subscribe** - Subscribe endpoint to topic
|
|
- **ListSubscriptions** - List topic subscriptions
|
|
- **Unsubscribe** - Remove subscription
|
|
|
|
### Advanced Features
|
|
- **Platform Endpoints** - Mobile push notifications
|
|
- **SMS Publishing** - Send SMS messages
|
|
- **FIFO Topics** - Ordered message delivery with deduplication
|
|
- **Filter Policies** - Filter messages based on attributes
|
|
- **Message Attributes** - Enrich messages with metadata
|
|
- **DLQ for Subscriptions** - Handle failed deliveries
|
|
|
|
### Java SDK v2 Key Classes
|
|
```java
|
|
// Core clients and models
|
|
software.amazon.awssdk.services.sns.SnsClient
|
|
software.amazon.awssdk.services.sns.model.*
|
|
software.amazon.awssdk.services.sns.model.MessageAttributeValue
|
|
```
|
|
|
|
## Best Practices from AWS
|
|
|
|
### SQS Best Practices
|
|
1. **Use Long Polling**: Set `waitTimeSeconds` (10-40 seconds) to reduce empty responses
|
|
2. **Batch Operations**: Use `SendMessageBatch` for efficiency
|
|
3. **Visibility Timeout**: Set appropriately based on processing time
|
|
4. **Handle Duplicates**: Implement idempotent processing for retries
|
|
5. **Monitor Queue Depth**: Use CloudWatch for monitoring
|
|
6. **Implement DLQ**: Route failed messages for analysis
|
|
|
|
### SNS Best Practices
|
|
1. **Use Filter Policies**: Reduce noise by filtering messages
|
|
2. **Message Attributes**: Add metadata for routing decisions
|
|
3. **Retry Logic**: Handle transient failures gracefully
|
|
4. **Monitor Failed Deliveries**: Set up CloudWatch alarms
|
|
5. **Security**: Use IAM policies for access control
|
|
6. **FIFO Topics**: Use when order and deduplication are critical
|
|
|
|
## Error Handling Patterns
|
|
|
|
### Common SQS Errors
|
|
- **QueueDoesNotExistException**: Verify queue URL
|
|
- **MessageNotInflightException**: Check message visibility
|
|
- **OverLimitException**: Implement backoff/retry logic
|
|
- **InvalidAttributeValueException**: Validate queue attributes
|
|
|
|
### Common SNS Errors
|
|
- **NotFoundException**: Verify topic ARN
|
|
- **InvalidParameterException**: Validate subscription parameters
|
|
- **InternalFailureException**: Implement retry logic
|
|
- **AuthorizationErrorException**: Check IAM permissions
|
|
|
|
## Integration Patterns
|
|
|
|
### Spring Boot Integration
|
|
- Use `@Service` classes for business logic
|
|
- Inject `SqsClient` and `SnsClient` via constructor injection
|
|
- Configure clients with `@Configuration` beans
|
|
- Use `@Value` for externalizing configuration
|
|
|
|
### Testing Strategies
|
|
- Use LocalStack for local development
|
|
- Mock AWS services with Mockito for unit tests
|
|
- Integrate with Testcontainers for integration tests
|
|
- Test idempotent operations thoroughly
|
|
|
|
## Configuration Options
|
|
|
|
### SQS Configuration
|
|
```java
|
|
SqsClient sqsClient = SqsClient.builder()
|
|
.region(Region.US_EAST_1)
|
|
.build();
|
|
```
|
|
|
|
### SNS Configuration
|
|
```java
|
|
SnsClient snsClient = SnsClient.builder()
|
|
.region(Region.US_EAST_1)
|
|
.build();
|
|
```
|
|
|
|
### Advanced Configuration
|
|
- Override endpoint for local development
|
|
- Configure custom credentials provider
|
|
- Set custom HTTP client
|
|
- Configure retry policies
|
|
|
|
## Monitoring and Observability
|
|
|
|
### SQS Metrics
|
|
- ApproximateNumberOfMessagesVisible
|
|
- ApproximateNumberOfMessagesNotVisible
|
|
- ApproximateNumberOfMessagesDelayed
|
|
- SentMessages
|
|
- ReceiveCalls
|
|
|
|
### SNS Metrics
|
|
- NumberOfNotifications
|
|
- PublishSuccess
|
|
- PublishFailed
|
|
- SubscriptionConfirmation
|
|
- SubscriptionConfirmationFailed
|
|
|
|
## Security Considerations
|
|
|
|
### IAM Permissions
|
|
- Grant least privilege access
|
|
- Use IAM roles for EC2/ECS
|
|
- Implement resource-based policies
|
|
- Use condition keys for fine-grained control
|
|
|
|
### Data Protection
|
|
- Encrypt sensitive data in messages
|
|
- Use KMS for message encryption
|
|
- Implement message signing
|
|
- Secure endpoints with HTTPS |