2023.10.10
AWS SQSのFIFOキューを検証してみる
はじめに
こんにちは。グループ研究開発本部 次世代システム研究室のK.X.Dです。
AWS SQSのFIFOキューについて、特殊機能を検証してみます。
検証目的は同時に高スループットリクエストの時にも、FIFOキューはちゃんと順序保証できることを証明します。
1.やりたいこと
- AWS SQSのFIFOキュー設定
- AWS SDK実行環境設定
- FIFOキュー機能を実検証
2.環境構築
2-1.AWS SQSのFIFOキュー設定
+ キュータイプ:FIFO
+ メッセージ受信待機時間:20秒(ロングポーリング)
+ コンテンツに基づく重複排除:ON(ONにしないと、メッセージ送信の際にMessageDeduplicationIdが必須)
2-2.AWS SDK実行環境設定
今回は、AWS SDKをインストールCakephp環境で実験してみようと思います。
- Dockerfile
FROM php:7.3-apache COPY php.ini /usr/local/etc/php/ RUN apt-get update \ && apt-get install -y unzip libicu-dev \ && docker-php-ext-install intl \ && docker-php-ext-install pdo_mysql \ && a2enmod rewrite \ && apt-get clean \ && rm -fr /var/lib/apt/lists/* WORKDIR /var/www/html
- docker-compose
version: "3.7" volumes: db-store: driver: local services: myapp: build: ./docker/php platform: linux/x86_64 ports: - "8888:80" tty: true stdin_open: true volumes: - ./src:/var/www/html depends_on: - db phpmyadmin: container_name: 'phpmyadmin' image: phpmyadmin/phpmyadmin ports: - '8889:80' depends_on: - db environment: - PMA_HOST=db - PMA_USER=user - PMA_PASSWORD=secret db: image: mysql:5.7 platform: 'linux/amd64' volumes: - ./docker/mysql/conf.d:/etc/mysql/conf.d - db-store:/var/lib/mysql ports: - '8887:3306' environment: MYSQL_DATABASE: sampledb MYSQL_USER: user MYSQL_PASSWORD: secret MYSQL_ROOT_PASSWORD: secret TZ: "Asia/Tokyo"
DB接続必要がないですが、Cakephp環境構築揃えるためにDB Containerを用意しておきました。
- 環境インストール:
// Docker Container起動 docker compose up -d // Docker Container内に、Composerインストール(https://getcomposer.org/download/) php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');" // Cakephp Install cd /var/www/html && composer self-update && composer create-project --prefer-dist cakephp/app:^3.8 . // AWS SDK Install composer require aws/aws-sdk-php
- AWS SDKの認証情報設定:
今回検証のために、AWSアクセスポータルを利用して、一時的のシクレートトークンを取得します。
参照:https://docs.aws.amazon.com/ja_jp/signin/latest/userguide/iam-id-center-sign-in-tutorial.html
AWS Access Key ID、AWS Secret Access Key、AWS Session Tokenのそれぞれは、Docker Container内の/root/.aws/credentialsに保存します。
[default] aws_access_key_id = {AWS Access Key ID} aws_secret_access_key = {AWS Secret Access Key} aws_session_token = {AWS Session Token}
3.FIFOキュー機能を実検証
3-1.SQS Producerを作成する
/src/ShellファルダーにSqsProducerShell.phpを作成する
<?php namespace App\Shell; use Cake\Console\Shell; use Aws\Sqs\SqsClient; use Aws\Credentials\CredentialProvider; /** * Sqs shell command. */ class SqsProducer extends Shell { /** * Manage the available sub-commands along with their arguments and help * * @see http://book.cakephp.org/3.0/en/console-and-shells.html#configuring-options-and-generating-help * * @return \Cake\Console\ConsoleOptionParser */ public function getOptionParser() { $parser = parent::getOptionParser(); $parser ->addOption('bodyContent', [ 'help' => __('Body content') ]); return $parser; } /** * main() method. * * @return bool|int|null Success or error code. */ public function main() { $bodyContent = isset($this->params['bodyContent']) ? $this->params['bodyContent'] : "SQS Test Body"; $provider = CredentialProvider::defaultProvider(); $sqsClient = new SqsClient([ 'profile' => 'default', 'region' => 'ap-northeast-1', 'version' => '2012-11-05', 'credentials' => $provider ]); // for from 1 to 100 for ($i = 1; $i <= 100; $i++) { $params = [ 'MessageAttributes' => [ "Index" => [ 'DataType' => "String", 'StringValue' => strval($i) ], "ExecuteTime" => [ 'DataType' => "String", 'StringValue' => strval(microtime(true)) ] ], 'MessageGroupId' => 'messageGroup', 'MessageBody' => $bodyContent . $i, 'QueueUrl' => 'https://sqs.ap-northeast-1.amazonaws.com/153216492591/first_queue.fifo' ]; $result = $sqsClient->sendMessage($params); var_dump($result); } } }
3-2.SQS Consumerを作成する
/src/ShellファルダーにSqsConsumerShell.phpを作成する
<?php namespace App\Shell; use Cake\Console\Shell; use Aws\Sqs\SqsClient; use Aws\Credentials\CredentialProvider; use Aws\Exception\AwsException; /** * Sqs shell command. */ class SqsConsumerShell extends Shell { /** * Manage the available sub-commands along with their arguments and help * * @see http://book.cakephp.org/3.0/en/console-and-shells.html#configuring-options-and-generating-help * * @return \Cake\Console\ConsoleOptionParser */ public function getOptionParser() { $parser = parent::getOptionParser(); return $parser; } /** * main() method. * * @return bool|int|null Success or error code. */ public function main() { $provider = CredentialProvider::defaultProvider(); $sqsClient = new SqsClient([ 'profile' => 'default', 'region' => 'ap-northeast-1', 'version' => '2012-11-05', 'credentials' => $provider ]); $queueUrl = ''; // SQS Queue URL try { $result = $sqsClient->receiveMessage(array( 'AttributeNames' => ['SentTimestamp'], 'MaxNumberOfMessages' => 10, 'MessageAttributeNames' => ['All', 'MessageDeduplicationId'], 'QueueUrl' => $queueUrl, 'WaitTimeSeconds' => 20, )); $messages = $result->get('Messages'); if (empty($messages)) { $this->log("No messages in queue. \n", "debug"); return; } // for messages foreach ($messages as $message) { var_dump($message); $this->log($message, "debug"); $result = $sqsClient->deleteMessage([ 'QueueUrl' => $queueUrl, // REQUIRED 'ReceiptHandle' => $message['ReceiptHandle'] // REQUIRED ]); } } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); } } }
3-3.検証実行:
- 2ターミナルで下記のProducerコマンドを同時に実行して、キューにメッセージ送信します。
./bin/cake sqs_producer --bodyContent="Body content 1 " ./bin/cake sqs_producer --bodyContent="Body content 2 "
- Consumerコマンドを実行して、メッセージ受信ログでキューにあるメッセージ順序確認する
./bin/cake sqs_consumer
ログは長いで、一部のみ貼り付けます。
2023-10-05 19:22:57 Debug: Array ( [MessageId] => 346d7bd8-cc71-43d2-bc36-b1d88d998168 [ReceiptHandle] => AQEBUA8+gJQ3S0DpYNxyOvjlXRBMhojORh2tXQILMd0QczBHKgYCmLo5NGelHdZ7chG7k2yqucRbloD1urVNLk6+Xp/dIy4afVdhMfBA+JyEGQAfU/XlVtJdodLtUrlOireR+2XACw6KRDN3JxlGTyzG+xtaYwSM1xS1NV7evR9lwHQRPSbGdYYHhqLxh2p82avIdICAkrZfJuXR2Pn5v0ShVRDsdZW7kxKUtgZvIABJ7wG2hchwiNUPrxtqlVCPRtjV4zdasdv6kbq7brS77P0BZEur5X7LPS1wbGZZ++5c4fY= [MD5OfBody] => a85b2c1147e79d5e3b36797aec5fcc47 [Body] => Body content 1 1 [Attributes] => Array ( [SentTimestamp] => 1696533763080 ) [MD5OfMessageAttributes] => f909680bcac5546f490fb734a59d4bd2 [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533762.71 [DataType] => String ) [Index] => Array ( [StringValue] => 1 [DataType] => String ) ) ) 2023-10-05 19:22:57 Debug: Array ( [MessageId] => c1e4d56b-ff21-40d6-afc8-ce611497cdd9 [ReceiptHandle] => AQEBxJ/i8s4E0uopZj38x037seRf6HggOnqajTTwEIuayFVWZjYNoAf3bYhJDDaVB/roUWIep9kih0Jg7yNCztahAvZVSefIN/A7nnyh6g4Ga7ngiE9/nqo3joHzPwctadSPNk/EH1vAD5KOVq4xe7n4zRePQEm0xIxGSgp76xk8qhduIKi1+WzNi0qPIOF7m4LzA4sVnmwxQWhqWo4NMZ5UBYlA/kPgvkLE0y1Csgo4afwFTLDRzo5hQURPuVpkZkR7o+yS/4/L6pwaPmAQUmiHPtysTcaOyXJyscG30J6V7VI= [MD5OfBody] => 4bfe216ac6a51e0820d90e91c1b531e3 [Body] => Body content 1 2 [Attributes] => Array ( [SentTimestamp] => 1696533763131 ) [MD5OfMessageAttributes] => 85e4fe9603996bfe0c3ddd5e25aabc0d [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.1148 [DataType] => String ) [Index] => Array ( [StringValue] => 2 [DataType] => String ) ) ) 2023-10-05 19:22:57 Debug: Array ( [MessageId] => e79c1381-d833-419b-a3ec-480da782aba8 [ReceiptHandle] => AQEBRe7upmxZBFq7jkeTDBAuE9wLjf/3ND1Jakj8zjId/i5Pgc6Ah0Bie6HhNATBR6wyCl2wrUjYilombVzp94CxCHQmYv/AhEDG1DupgRjEijb6LRmfkO5QQW26WwEJGPOkZicJBcQajHW3LAWCegIijFZcfSP6/mhonwtNVUN3VM4OXrWieYPcyzKJQ3E+3G67UO1Ouf2wNakgkQm/pO145j4KGr5lTPOvO06mb2Zm99h7gRKP0HzB6I1uHIlJpfdfTSSbwAwOngniasTiW2QEfoMvuk80SdXnu5Rxi165z0E= [MD5OfBody] => a4c0ec963c2330a0a389df6e35e2a0bd [Body] => Body content 1 3 [Attributes] => Array ( [SentTimestamp] => 1696533763165 ) [MD5OfMessageAttributes] => b4e4c1ac1ec0bab6a5cc4ff9b2fde41c [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.1486 [DataType] => String ) [Index] => Array ( [StringValue] => 3 [DataType] => String ) ) ) 2023-10-05 19:22:57 Debug: Array ( [MessageId] => d53b1a9c-c525-48e5-9a79-817b0404db0e [ReceiptHandle] => AQEBzkDfdFX9CzbMt/KHDfTk+m0La+YKBMClQwdcTnvxWEcvJnm/UN6EXJyakG7w+hADQzYcO/Wg6fBTClLu4/bGuuqFoOCAcjiOi44vaphskgrBcyb3e3VsnmqrMFWmB13VHsgJnTbc8O0HXqnjSyar+hk307HZBRnh6Xs8rOu4Buq5U+ksfwkWPnGzTOTK09LbAec3wv0SpvmthvhqUkFBbraxhCgJm4OceXaMGmYhx7yaa6qr+2kA9ttFcQkE4yHwimTAmaKk1CdaYM4GlZNDYelimq/uVwSM5I12Q/sXj+U= [MD5OfBody] => 4b912bea7f9c13530399f04e1efe8b3f [Body] => Body content 1 4 [Attributes] => Array ( [SentTimestamp] => 1696533763194 ) [MD5OfMessageAttributes] => 2565fe5ac872328528caf479aa6b6f3f [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.1807 [DataType] => String ) [Index] => Array ( [StringValue] => 4 [DataType] => String ) ) ) 2023-10-05 19:22:57 Debug: Array ( [MessageId] => 0ad1d829-6024-4d95-8533-c4ab0d64951d [ReceiptHandle] => AQEBOTGJD1X69sEyyi2hqKNZoCO4+0KiJTbvTDentwZzZC6JJPpgDEkBpmaSvBghZM+GYTozGeIzF80l4sDvQVPK50yfKwdZFh3DMJPlozzIN6mftGzfnSdezO2AYPLF6hTiCdS4ZhRNJgYKQnnvqfFt6az1mW+Boun9zY1pXAF58qLH8ZfnhTcij4M90ZCjmUM81wL5K0yDko41OFZaGr+jlaA7DqPZm9PA5dhmwFtwVUBB5vIfBsRaCEt1bHoLZVkq8MWNmSAVKT52/xoHIFk33Y0iliF6NAcSuH1jg26e8WQ= [MD5OfBody] => 65e3b284ce0d3fe8596f9ac75fdfcdd9 [Body] => Body content 1 5 [Attributes] => Array ( [SentTimestamp] => 1696533763228 ) [MD5OfMessageAttributes] => 7d36dfdb9ed6722a7fb483116dff76fa [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.2109 [DataType] => String ) [Index] => Array ( [StringValue] => 5 [DataType] => String ) ) ) 2023-10-05 19:22:57 Debug: Array ( [MessageId] => 0510e6f0-931a-48f5-b763-be9d130e734a [ReceiptHandle] => AQEBNw6wJ5uk7ds94V9GYl2FAVEyO+aRh1LlAM02v8wRTjOhvH9oKwXMnSbp7YVWO9yiwECWVrd/l+/puci7j6XEQkPZWJNehOEQBhibZai+ql6PfpuH/uzhsNEgepcHCfYJmP2HXjwmAMecTAHijjVcWk6K4jyi7UC4PNqqHbEvZCFca5dHxnqYwHrbxlQMMzTwSGX7gOfMrjwPdJjbLf6gW5hg3H9s9UNAxaUUQYj+LMMqN0aPLQTLhpJrjG1RNQwcXlD/yGOZSFSxfBxhlcbPHi7nQ1rvMsoGrwWHLkBJPn4= [MD5OfBody] => 61fbeb57c3f5b932e3dbb3ae448f5152 [Body] => Body content 1 6 [Attributes] => Array ( [SentTimestamp] => 1696533763258 ) [MD5OfMessageAttributes] => 58f15aff22bbf6e50f92cedcd9c9ebab [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.2435 [DataType] => String ) [Index] => Array ( [StringValue] => 6 [DataType] => String ) ) ) 2023-10-05 19:22:57 Debug: Array ( [MessageId] => 3ba18033-9188-4573-862e-36d66e89f706 [ReceiptHandle] => AQEBAznwWxVrnaC8ESLr6ePw9z34l3Y/cfbziPpGaMsrqn32ZnvDYo02H6CAKlbJHT+NoQLr0t1weYatfzWWhd6wkq1tyorOOr+d2C92tDcvVLDryFdHf/WKOd1uGVUjEoRrPN6iRWa4aackYzVxh+fLT5EerNntRChMARXA8h6MdWTxEBs3a1d+GcEuHoaQY2EQGOpk/hQMw4L/hTgx2WClLucaOXgzVPETUxYUBvSbA7vlJjZ6ZqEEb7Wdsz05M62nyEUuntccJ+NK5mb8xWpjSrCXmmHQAD7xWdYWFY3jLog= [MD5OfBody] => 19cbb515233ac37c2d97212b5c82e436 [Body] => Body content 1 7 [Attributes] => Array ( [SentTimestamp] => 1696533763290 ) [MD5OfMessageAttributes] => 5c7bc99bc8d9f20184522f6738eebf82 [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.2766 [DataType] => String ) [Index] => Array ( [StringValue] => 7 [DataType] => String ) ) ) 2023-10-05 19:22:57 Debug: Array ( [MessageId] => ceca441a-9f77-486d-8bac-ead2f82f458a [ReceiptHandle] => AQEB15S/FBCOufWBKHAR7FOFKn4qceNzTTfsA+J7Jes5MnNBVfUsc9tk8XN0VU8NEnx34gjHjk5QaoP3TqokdqWL4riYIpqWQ5eLElOY4YxAIvNtHdZC6zAev0XI+JgVXkIfNfeMEHQzitSN+rStWmtikWh/NY+K5WnCac6k9q2gwz5dtDi5Wuk9BgCHWCzHYXN+Rsf1HUSY0EMjeg0n5hAul2GZICBloD5c5Cfc970kcNHHL7Bt110/2jDT0F0CwZOC3CrN705UPETINF4yyFRKYkLUo7FM8xMdQp8dhPiFJ18= [MD5OfBody] => 07371d4faec6725f9c74e11e20aeca7b [Body] => Body content 1 8 [Attributes] => Array ( [SentTimestamp] => 1696533763322 ) [MD5OfMessageAttributes] => 46f703d5096efd2848fb3327405e6c44 [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.309 [DataType] => String ) [Index] => Array ( [StringValue] => 8 [DataType] => String ) ) ) 2023-10-05 19:22:57 Debug: Array ( [MessageId] => 9cd299b5-43ae-4b92-905e-044a589c1182 [ReceiptHandle] => AQEBBdCBXaNWnVSwoNC2/eqUC8Qe+SSF4pCGo3cpQrfE7QWGoR/4CYTaPE65sBwR7gdUcT1dozMciy3LGnyr+QNXtmBSks1h5dsMtT64rFeb5HPP9JwB3S1aYwVlvik84SATGtxW5PTruixyX+4vPymN3NfuMb1NfRHJT3dzDKQHamauiZ/AlxjWSoG2FTzssRnBmPdoixBc8MJZ5BvDaJS0wuSouGTDmwPt3hJ5i0QOweEMnux29BkxwT3ziPXzuRUsPiVfO6tRsGyCEvp3K71B9xY4CzN+5/WD5SDFrCSzE8c= [MD5OfBody] => 4572d674d4f470acee48125f3d2244bd [Body] => Body content 1 9 [Attributes] => Array ( [SentTimestamp] => 1696533763359 ) [MD5OfMessageAttributes] => a636aa52ae8043e41310654974cf57a1 [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.3439 [DataType] => String ) [Index] => Array ( [StringValue] => 9 [DataType] => String ) ) ) 2023-10-05 19:22:57 Debug: Array ( [MessageId] => ee1fe79b-5906-4553-b0a4-27f34c54fbad [ReceiptHandle] => AQEBdUAI0s4hvZszFYBJ18M06rONHmOcfKxE1hMCT25Lzgujfd8iaNYYR+WczhFWIXLG9BP0dbHlRQA8D6g6kQcPnHNab6NXVuOgvy4GRDUhmU2zxUSWg2p+iqTOnVOr4FpiZkdj9fnVTzzdyBEQAP9LGYdyWrFa1Qt18FYy1oX9Z4MBCXrZPs67MkD5p0MPHA7I8K9tTmxrqq+3ES1JGx3S0OvjiaHMaFGyWYis6MLe+Zce9wINT7RVMvzwJADOpAh46qG3oU0V7b/Yt7+9+GAI8vx69dtbgYguh0ICMcMqE3Y= [MD5OfBody] => 6a979d801199a013ce32e8bea5c779e7 [Body] => Body content 1 10 [Attributes] => Array ( [SentTimestamp] => 1696533763391 ) [MD5OfMessageAttributes] => 422eb634cc57ab8f95407144a8e90919 [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.3762 [DataType] => String ) [Index] => Array ( [StringValue] => 10 [DataType] => String ) ) ) 2023-10-05 19:22:59 Debug: Array ( [MessageId] => 273ab9c8-1294-41af-986a-91920ed46e2b [ReceiptHandle] => AQEBCrfFlJff5GZCPhHADXTJWWQqNh/AHhfrqrIqEjEv5FL2uhIxmqJvqK04qDC9aOR6SdNIQUEnJdv/t26xtwqg5UvcZuzx/BwAEyWhNI1JC9W2jwAJ4W7ZXTsmqAWPQru6Vr2Xrxk/7GbZNLqLLUeoUzfu/k9pFRngtkgsMAj7uZYgXeEp1acRgys23uSwxWbGCKWtD4q/YcMZ0fmg/RlAVjOVZQ5iNQelMJJqiNTaTkPzwMvZOrw4QHCQzrlAAjFm4vbUOz03iyaKHPFOtsEEsg2Hmk79lHRf+SXyZSTbEWY= [MD5OfBody] => daf8a09f0d40e75045b574e367e824c6 [Body] => Body content 1 11 [Attributes] => Array ( [SentTimestamp] => 1696533763420 ) [MD5OfMessageAttributes] => ed10f37b435354585926a6957a4e59b9 [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.4058 [DataType] => String ) [Index] => Array ( [StringValue] => 11 [DataType] => String ) ) ) 2023-10-05 19:22:59 Debug: Array ( [MessageId] => d1de5c19-ffe5-4c3f-aa9e-50f9110cf530 [ReceiptHandle] => AQEBQYY1urksTSq2024g0lbDgHgpAVBpVxpJLBfM0Z3wnv1/rUJI3dLLMX3gqtL34zGKLNVhNMr1JRiYca0SBW2RLaUhwrr1bDMjBwmcGTvBdi5H/3A53XBFo/3UUvtG3Cq6GT6+TZZxIJyf1Empu2RWMd+WSMynQGX0L0A9Au0WhKnwFd83TJSi/rhP7bmTsooZkv3+lZ8IW8TMG95YMW9wQcnP9Ll8YfibJPKju85iNJkzxTaypO4gsLqYcyc7P4oRi2j9TdkbuLo/bivEKlRSFBQDjn3AsMC3fyUyyZ8p/bw= [MD5OfBody] => 649857cec199e9ad483000d8a68c4754 [Body] => Body content 1 12 [Attributes] => Array ( [SentTimestamp] => 1696533763452 ) [MD5OfMessageAttributes] => 736f294b29991f61dad8d81a650b4749 [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.4376 [DataType] => String ) [Index] => Array ( [StringValue] => 12 [DataType] => String ) ) ) 2023-10-05 19:22:59 Debug: Array ( [MessageId] => c086e0ae-0947-454d-bb6c-6f76bcbc2eb7 [ReceiptHandle] => AQEBMd+P4aWhTWEPelsfQ+OqVlzNKwnfTPhR0WtvCGsnQ/tEPkEO2Gz7FstkA0nqRc4ooBHfs3HG0zBhrft6XXSgvr71GIaf6mtarfsbZvwMiaSvwUT7XtvAX+KSDZUwWboxcTRBOZdV+2kK5VE7Zqh7UwJxBJp+ECHDTigyLgQqhm6NEgmdFf7eUSaPViMw0RbTEYOpbCT6SSGTeHYWK7cCBuBpqc7Dk0s6oMlIKwWMKoMDc1G8a71G6tdjWtaLHMMNYoXpORttPurO6YWnq5qvk3KhHqHd7FQXo5znQjt9UAI= [MD5OfBody] => 22c57cd6a0224bbbd192c6ef7c62b7d2 [Body] => Body content 1 13 [Attributes] => Array ( [SentTimestamp] => 1696533763483 ) [MD5OfMessageAttributes] => a2c6b94533ad91409c5b71f58fa3a808 [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.4708 [DataType] => String ) [Index] => Array ( [StringValue] => 13 [DataType] => String ) ) ) 2023-10-05 19:22:59 Debug: Array ( [MessageId] => 2aec2e68-72ad-4695-ad52-33f4804e444d [ReceiptHandle] => AQEBdoB4ABcbR/yCKKfWqpsa5waUGdztoGUAdJ5bTIOBSeooqEURt+3ODOHPKB5suejhpRdJuI2WITcLS7Tb48P6AklQVc61LJFTByUvhY/R470b88LRx7ikfT8VKL6qMnmDz9+9vsd4G3ZA3+mtF7uU8RKTOg40xNxkiNHTsiE+YWeUiWSyUyh4+cyTXwDMPAPXVPXS+xgcpau0iBs6hAqmAbU5/7wVVCpDJkopDfFJQoejYBhAGqQy9yhG4NTJo5f2dFchLx30U+shztWzOa48z409LEEJbJuGJEMoNZza91Y= [MD5OfBody] => 891240a76c2c2d24ee6714424707025a [Body] => Body content 2 1 [Attributes] => Array ( [SentTimestamp] => 1696533763505 ) [MD5OfMessageAttributes] => f63baf798913bf0c311f52c2f15d1ec6 [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.2659 [DataType] => String ) [Index] => Array ( [StringValue] => 1 [DataType] => String ) ) ) 2023-10-05 19:22:59 Debug: Array ( [MessageId] => ebd850c6-9ba3-483d-b243-573d7bf9f942 [ReceiptHandle] => AQEBYIyvGYEg+P+ibKtvgnuliQ55uQzDBdvnskNMcjMfe1EEWFK9OTTTlDbrAUOs9UlmWT6khqxxpI557kV+EJYLp1HT1Yivl58k/+nEhEXYXee5KZQmPtTuGeUxtNa9OGDVTSKx1uclNgrYL4eCsUZMJDy9pAlmsl7pYcDjN1v9154kxkoHCyBhOJW5bGP6RdAj5KLejqh4Fq+Gsw2N8LSofwVzJfYo24xdg7vOViRkVBR20y39OMDn4WEn6OSD8wVyIodWxaYIrpp8TigkmT5pQl8RNMiFAHivwuVStiUACjs= [MD5OfBody] => 0bbf4fe66c53e94cdeac5226f5420861 [Body] => Body content 1 14 [Attributes] => Array ( [SentTimestamp] => 1696533763514 ) [MD5OfMessageAttributes] => f5ef2436d8271256ce5fc807ab36ede9 [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.5002 [DataType] => String ) [Index] => Array ( [StringValue] => 14 [DataType] => String ) ) ) 2023-10-05 19:22:59 Debug: Array ( [MessageId] => fcc3792a-9bb8-4676-9e8e-a24fd1842835 [ReceiptHandle] => AQEBybnggsIqgemnBPZeBRpwnYt1czKTeKcnpV8y3qqH00Nv95fd260IuNRtySOqhrF+iUl6+DVetpgN5TNRoh3AqbRTQB+BBX0SxdwSI+v+1ovn+XwQ2lU9wpzq+i26RBGqrhDaoIiCW1ZbHcKDMZqIGf1/+XJHfq6zHLha426PUkobZ9vjUCNI6SWWN8MNL1nXqaT9bgclcGP01pofHjl+ZzXyqOWLY1Nly8qmwsfIT/bgAUPwWrnxoCp6NMGraovKdfSWT1dxiyjmnMJmBBDy6BnNeGx9eih/RKZKEkeKRpk= [MD5OfBody] => 410c89235e33d9d7ee2afe53c408a57d [Body] => Body content 1 15 [Attributes] => Array ( [SentTimestamp] => 1696533763547 ) [MD5OfMessageAttributes] => 4efade37ad80efd63d565d2327082113 [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.5322 [DataType] => String ) [Index] => Array ( [StringValue] => 15 [DataType] => String ) ) ) 2023-10-05 19:22:59 Debug: Array ( [MessageId] => bcf3d3f3-2f58-4bc9-8a2f-ad0c85109e73 [ReceiptHandle] => AQEBkuTA8p6y8jyu8pEaHuDn3Ua5PrmxPtXUqRmQrG4APVYFHnDjx522SD49T2X+TXlsILSqccdR2ziWIhho1snqUDbhVPbNSc8SSrsoYmeDvuLKgAWl/vLIs99c1yXJGUH2PyELL/rGuPsipBvw2pOuDDjX9Uhv1kGzYo3IDiRKyl6i15w5zjTNwKd6wQucZmWagsmjxnZXxXEppWqkxxe/bDg8Ha+peU5r7aD6+FfF6fvcFIP2WDeSQGlnO52RNQr+ndNrNClC32GMgtkcKBZzriF4uXzCL6dPvBlEhHvfUFs= [MD5OfBody] => c1371e3c29f5d3f7c2c6e5d39085c4df [Body] => Body content 2 2 [Attributes] => Array ( [SentTimestamp] => 1696533763554 ) [MD5OfMessageAttributes] => 81f1e294a3fa6ed63a4ef0854e394ca9 [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.54 [DataType] => String ) [Index] => Array ( [StringValue] => 2 [DataType] => String ) ) ) 2023-10-05 19:22:59 Debug: Array ( [MessageId] => 84445f4e-ee13-44e3-8669-1d56be00f648 [ReceiptHandle] => AQEBWV1CePE/ic5CFwJum1+/ANiTLrJRePv/hX+gtMcuTexoE8nFmxAHpKPf05ZU0bno8eNyrC6kRNFHdDNe3lxtexC86IAvHwYwmQkd1HYYqiKtF5HCJyAR6Dgr2yflNKzWT+9CNazETcImLNR/N6p4Bxbq0k5JW4/otNuaEVq2UKeIKlCVyTp9iqZEGCKDriWTZb9aLoX4zD7HbGt4jOsk6B1k7rL2Ic32vEsOh/vaoeQRKg0N2rgO+hobum17KzLuL4gm6S5x3o7XxknghcIUHvKnT+SY51MiRyFcV7rXVN4= [MD5OfBody] => a419c37f25a016a1f9e98065e1c6161a [Body] => Body content 1 16 [Attributes] => Array ( [SentTimestamp] => 1696533763583 ) [MD5OfMessageAttributes] => 5f91155afe46da81e99ee0af81cb9606 [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.5657 [DataType] => String ) [Index] => Array ( [StringValue] => 16 [DataType] => String ) ) ) 2023-10-05 19:22:59 Debug: Array ( [MessageId] => 85b8a54a-72c2-477c-a05b-e0dd68c5990f [ReceiptHandle] => AQEBeo39xLdHGo8PtCWvCO8SP+148/Bx9VZfIr+6E3MMZoZcGEnHQi1OVOJPRNPdwEdY667kXNQ/ZubwM8V5XCEq+X6jJLb03zbgDGr7OeucuxH9J0mXCAwlVajphaqxyvOHCFLQkHeZ/X2x2vdHYIL8nrHPX6KHAXvqB4xSLOtPX5RdaC8giFCLUiz/jTaD9M1sc0Ji/FFp9K36Hi3gR2OOExd89e+XIOvuvFJiPRl3AKUx1Q404NqTmCmg65e6XemSCltwRUN5Zgar+SUsBY/+iaxZ8KyWZyq1taAYk6tA9fI= [MD5OfBody] => dc165028cae3cbecdb61db402128fff0 [Body] => Body content 2 3 [Attributes] => Array ( [SentTimestamp] => 1696533763593 ) [MD5OfMessageAttributes] => abb1b3ea1fc0b99e4dffc3d40374eeb4 [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.5733 [DataType] => String ) [Index] => Array ( [StringValue] => 3 [DataType] => String ) ) ) 2023-10-05 19:22:59 Debug: Array ( [MessageId] => dffa5ae0-6f8a-4b28-a433-a6b03cd83e16 [ReceiptHandle] => AQEB1BMX3uxJaR8SI+Uv319SVSfU/j1JbclpBMVZtpFDTMrSoRi3UXaE22FASPl2T5mBM1+PsIK8LLx0SgVZ8c/Zks6ii9MkvG1yPpmM4ZpPkPcfedY6GSsszlACim3zn3RaDL6/WPf4ZYzS5x/UPl1A4wJXYbewg1wPhvzmU7NYVWXQzZiocpItKQql7OIWCfucyIbZFI5LNmGIBB1nrijFEk1Kx/BeyLKyLE3LNYZd7sFjwKLsUTvNyEWyJrcOuYi65YdKvudL25ucBYOW1KWlzbjCgoCA+5hNHsVQasWcaoE= [MD5OfBody] => 3263d9370eed91a6b200b6d83c73e5e5 [Body] => Body content 1 17 [Attributes] => Array ( [SentTimestamp] => 1696533763615 ) [MD5OfMessageAttributes] => 37df8f11fe3ef936e98f5e32b812a8d6 [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.5998 [DataType] => String ) [Index] => Array ( [StringValue] => 17 [DataType] => String ) ) ) 2023-10-05 19:23:00 Debug: Array ( [MessageId] => f30fc025-db32-4225-b5fc-5dcc54bd15c0 [ReceiptHandle] => AQEBjncIorzRH11Y98Clro6AftcEyC4Uy+LyZZSIbj2qk3kCFAp4eQNKsENkSP+uFSjEfW8Qylqvzk5VC2CuXLB/1FEaic+noEWe0PZAQxzdOWhzxn16mQD2cpMw0OEIGdq5e88m2Z5P09gFf8S9OY2v4DGpq0inrJfpZKu48aSnlg9IFA4lvBh86vMEptvvzhHbBiCS5SOIFuL0w4TvvfXkurZOExD5yKOOxxIUkeqHK6k2iCq4kkUwekQ5gX59XTOJzxi5w0PAmHfmq6Qq8OkBGs+W0JtOlkzbN9LSyICZnrM= [MD5OfBody] => 497c93e2b04e2c9263f0bb9fbe2af8b4 [Body] => Body content 2 4 [Attributes] => Array ( [SentTimestamp] => 1696533763624 ) [MD5OfMessageAttributes] => 5a474b64490a88ffa7a714c9c936f20d [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.6084 [DataType] => String ) [Index] => Array ( [StringValue] => 4 [DataType] => String ) ) ) 2023-10-05 19:23:00 Debug: Array ( [MessageId] => 5c40c6af-a8be-4346-9dd2-b2bed097e2b8 [ReceiptHandle] => AQEBKmI+zmtxBmAqis3PEY/CNp44LwMwqeL1vsn/jA1nwG+Qta5NecCYZOn+JUSrinCpb87fnC2VEZpTya7MQQ6vIPPGclxK+ObQnneb0t6oPF8/BNhO/sZQ+SJuUSi0nKgy83s6NKZP1eCF3VS9dOddCi+mrvYk2kNULy9M+atSD2+6b5a2N1WW9G5xyR9oTCTRXMzJtmRmTOvNu7DEpIbwKQfEr2DMQi+ubJ3bBousFYvZFFs1PJ7zEEmpUeigAtzM3I7Ur393NEIOlxScKzwe/HiitQ/iKe2QpDZ87KizfQ4= [MD5OfBody] => c51bab901520d35eb03ae3d9192ec971 [Body] => Body content 1 18 [Attributes] => Array ( [SentTimestamp] => 1696533763648 ) [MD5OfMessageAttributes] => d54feb149295befbf7c32258baf0c0ec [MessageAttributes] => Array ( [ExecuteTime] => Array ( [StringValue] => 1696533763.6345 [DataType] => String ) [Index] => Array ( [StringValue] => 18 [DataType] => String ) ) )
ExecuteTimeはメッセージ送信時刻のMilisecondで記録しています。そちらを確認すると、キューから取ってくるメッセージがメッセージ送信順序担保することを確認できます。
4.まとめ
現代のシステムは、負荷分散ためによくMessageQueueの仕組みで活かしてます。
今回はキューサービスの一つで、AWS SQSのFIFOキューを設定、検証するにあたって、AWS SQSのFIFOキューの理解が深くなっております。
今後、チャンスがあれば、負荷分散実装に活用していきたいと思います。
宣伝
次世代システム研究室では、最新のテクノロジーを調査・検証しながらインターネットのいろんなアプリケーションの開発を行うアーキテクトを募集しています。募集職種一覧 からご応募をお待ちしています。
グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。
Follow @GMO_RD