aws-sdk-java-v2-messaging
AWS SDK for Java 2.x を使用して、SQSキューおよびSNSトピックに関するAWSメッセージングパターンを提供します。メッセージの送受信、FIFOキュー、DLQ、サブスクリプション、Pub/Subパターンを処理します。SQSまたはSNSを用いたメッセージング実装時に使用してください。
description の原文を見る
Provides AWS messaging patterns using AWS SDK for Java 2.x for SQS queues and SNS topics. Handles sending/receiving messages, FIFO queues, DLQ, subscriptions, and pub/sub patterns. Use when implementing messaging with SQS or SNS.
SKILL.md 本文
AWS SDK for Java 2.x - メッセージング (SQS & SNS)
概要
AWS SDK for Java 2.x を使用した SQS キューと SNS トピックのパターンを提供します。クライアントセットアップ、キュー管理、メッセージ操作、サブスクリプション、Spring Boot 統合に対応しています。
使用する場面
- メッセージバッファリング用の SQS キュー (標準または FIFO) のセットアップ
- SNS トピックとサブスクリプションを使用した pub/sub の実装
- ロングポーリングでの SQS キューからのメッセージ処理
- エラーハンドリング用のデッドレターキュー (DLQ) の構成
- AWS メッセージングと Spring Boot アプリケーションの統合
- SQS/SNS を使用したイベント駆動アーキテクチャの構築
例
クイックセットアップ
依存関係:
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sqs</artifactId>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sns</artifactId>
</dependency>
クライアント設定:
SqsClient sqsClient = SqsClient.builder()
.region(Region.US_EAST_1)
.credentialsProvider(DefaultCredentialsProvider.create())
.build();
SnsClient snsClient = SnsClient.builder()
.region(Region.US_EAST_1)
.build();
SQS 操作
キューの作成とメッセージの送信:
String queueUrl = sqsClient.createQueue(CreateQueueRequest.builder()
.queueName("my-queue")
.build()).queueUrl();
String messageId = sqsClient.sendMessage(SendMessageRequest.builder()
.queueUrl(queueUrl)
.messageBody("Hello, SQS!")
.build()).messageId();
メッセージの受信と削除:
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 キュー:
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 操作
トピックの作成とパブリッシュ:
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 から SQS へのサブスクリプション:
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 統合
@Service
@RequiredArgsConstructor
public 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());
}
}
手順
メッセージ処理の実装 (検証付き)
- キュー/トピックの作成 - 適切な設定で実施
- メッセージの送信 -
messageIdが返されることを検証 - メッセージの受信 - ロングポーリング (
waitTimeSeconds: 20) で実施 - メッセージの処理 - 処理前にペイロードを検証
- メッセージの削除 - 処理成功後のみ削除、削除レスポンスを確認
- DLQ の確認 -
redrivePolicyを使用して定期的に失敗メッセージを確認 - 配信の検証 - CloudWatch
NumberOfMessagesSentメトリクスを監視
検証チェックリスト:
// 送信後
if (messageId == null || messageId.isEmpty()) {
throw new MessagingException("Message send failed - no messageId returned");
}
// 受信後
if (response.messages().isEmpty()) {
log.debug("No messages available - normal with long polling");
}
// 削除後
if (!deleteResponse.sdkHttpResponse().isSuccessful()) {
throw new MessagingException("Message deletion failed");
}
認証情報のセットアップ
export AWS_ACCESS_KEY_ID=your-access-key
export AWS_SECRET_ACCESS_KEY=your-secret-key
export AWS_REGION=us-east-1
監視とデバッグ
- CloudWatch メトリクス:
ApproximateNumberOfMessages、NumberOfMessagesSent、NumberOfMessagesReceived - SDK ロギング有効化:
software.amazon.awssdkを DEBUG レベルで設定 - X-Ray による分散トレーシング利用
ベストプラクティス
SQS:
- ロングポーリング (20~40 秒) を使用して空のレスポンスとコストを削減
- 処理成功後は必ずメッセージを削除
- 重複処理対応のためべき等処理を実装
- 失敗メッセージ用に DLQ (
redrivePolicy) を構成 - 順序が重要な場合は FIFO キューを使用 (300 メッセージ/秒の制限あり)
SNS:
- フィルターポリシーで不要な配信を削減
- メッセージを 256KB 以下に保つ
- 指数バックオフによる再試行を実装
NumberOfNotificationFailedメトリクスを監視
全般:
- 静的認証情報ではなく IAM ロールを使用
- クライアントを再利用 (スレッドセーフ)
- LocalStack または Testcontainers でテスト
詳細なリファレンス
references/detailed-sqs-operations.mdreferences/detailed-sns-operations.mdreferences/spring-boot-integration.mdreferences/aws-official-documentation.md
制約と警告
- メッセージサイズ: SQS と SNS の最大値は 256KB
- 可視性タイムアウト: 削除されないメッセージはタイムアウト後に再び表示されます。処理後は必ず削除してください
- 入力検証: メッセージボディを処理前にサニタイズしてください。メッセージに信頼できないペイロードが含まれる可能性があります
- FIFO ネーミング: 名前の末尾は
.fifoである必要があります - FIFO スループット: キュー単位で 300 メッセージ/秒 (高スループット用にはパーティショニングを使用)
- メッセージ保持期間: SQS はメッセージを最大 14 日間保持
- DLQ 必須: メッセージ損失を防ぐためにデッドレターキューを構成してください
- リージョン固有: SQS キューはリージョン固有です。クロスリージョンには SNS が必要です
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- giuseppe-trisciuoglio
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/giuseppe-trisciuoglio/developer-kit / ライセンス: MIT
関連スキル
superpowers-streamer-cli
SuperPowers デスクトップストリーマーの npm パッケージをインストール、ログイン、実行、トラブルシューティングできます。ユーザーが npm から `superpowers-ai` をセットアップしたい場合、メールまたは電話でサインインもしくはアカウント作成を行いたい場合、ストリーマーを起動したい場合、表示されたコントロールリンクを開きたい場合、後で停止したい場合、またはソースコードへのアクセスなしに npm やランタイムの一般的な問題から復旧したい場合に使用します。
catc-client-ops
Catalyst Centerのクライアント操作・監視機能 - 有線・無線クライアントのリスト表示・フィルタリング、MACアドレスによる詳細なクライアント検索、クライアント数分析、時間軸での分析、SSIDおよび周波数帯によるフィルタリング、無線トラブルシューティング機能を提供します。MACアドレスやIPアドレスでのクライアント検索、サイト別やSSID別のクライアント数集計、無線周波数帯の分布分析、Wi-Fi信号の問題調査が必要な場合に活用できます。
ci-cd-and-automation
CI/CDパイプラインの設定を自動化します。ビルドおよびデプロイメントパイプラインの構築または変更時に使用できます。品質ゲートの自動化、CI内のテストランナー設定、またはデプロイメント戦略の確立が必要な場合に活用します。
shipping-and-launch
本番環境へのリリース準備を行います。本番環境へのデプロイ準備が必要な場合、リリース前チェックリストが必要な場合、監視機能の設定を行う場合、段階的なロールアウトを計画する場合、またはロールバック戦略が必要な場合に使用します。
linear-release-setup
Linear Releaseに向けたCI/CD設定を生成します。リリース追跡の設定、LinearのCIパイプライン構築、またはLinearリリースとのデプロイメント連携を実施する際に利用できます。GitHub Actions、GitLab CI、CircleCIなど複数のプラットフォームに対応しています。
tracking-application-response-times
API エンドポイント、データベースクエリ、サービスコール全体にわたるアプリケーションのレスポンスタイムを追跡・最適化できます。パフォーマンス監視やボトルネック特定の際に活用してください。「レスポンスタイムを追跡する」「API パフォーマンスを監視する」「遅延を分析する」といった表現で呼び出せます。