Amazon SQSのステータス遷移を確認する
Amazon Simple Queue Service(Amazon SQS)を少し触ってみたのでメモ
64KBまでの文字列を登録するだけのシンプルなサービス
メッセージを追加して取得してみる
キューの作成は名前を入力するだけなので省略。作成するとURLが生成される
AWS-SDKforJavaにてメッセージを追加/取得するコードは以下
String accessKey = "【AWSアクセスキー】"; String secretAccessKey = "【AWSシークレットキー】"; AWSCredentials cre = new BasicAWSCredentials(accessKey, secretAccessKey); AmazonSQSClient client = new AmazonSQSClient(cre); client.setEndpoint("sqs.ap-northeast-1.amazonaws.com"); // メッセージを送信 client.sendMessage(new SendMessageRequest() .withQueueUrl("【キューのURL】") .withMessageBody("Hello, world!")); // メッセージを取得 ReceiveMessageResult receive1 = client.receiveMessage( new ReceiveMessageRequest().withQueueUrl("【キューのURL】")); ReceiveMessageResult receive2 = client.receiveMessage( new ReceiveMessageRequest().withQueueUrl("【キューのURL】"));
確認のため2回実行してみたが片方からしかメッセージは取れない。(空が返ってくる)
メッセージの内容は以下のようなもの
{ MessageId: "502ebed6-a02b-4b2a-87e3-3de0d59p9d43", ReceiptHandle: "【300文字くらいの長い文字列】", MD5OfBody: "f0c75976a003b4690235c3o23a5d41c4", Body: "Hello, world!", }
ロック期間を延長する
メッセージを取得した際にロックされるが一定時間経過すると解除される
キューの設定に規定のロック期間を設定することができる
Default Visibility Timeout | 取得したメッセージをロックする時間(規定値30秒) |
---|
メッセージを取得したクライアントからはロック期間の延長を要求することが可能
client.changeMessageVisibility(new ChangeMessageVisibilityRequest() .withQueueUrl("【キューのURL】") .withReceiptHandle("【ReceiptHandle】") .withVisibilityTimeout("【ロック期間(秒)】"));