Amazon sqsからのメッセージをsqsに挿入されたのと同じ順序で受け取りたい(先入れ先出しモデル)。それを実装する方法はありますか?私はプログラミングにzendphpを使用しています。
4 に答える
順序付けられていないメッセージ配信は、SQSの設計に固有のものです。メッセージに番号を付け、欠落しているメッセージが到着するまで順序が正しくないメッセージをローカルに保存することで回避を試みることができますが、おそらく面倒な価値はありません。
SQSは実際には少し奇妙なアヒルであり、それが言うことを実行しますが、それが実行することは、ほとんどの人がメッセージバスで探しているものではありません。AmazonがRabbitMQのような追加のキューイングソリューションを提供してくれることを本当に望んでいます。SQSは、実際には、リモートで結合されていないタスクの分散にのみ適しており、順序やレイテンシーなどは重要ではありません。たとえば、完了した注文を配送センターに送信したり、印刷ジョブをスケジュールしたりするのに最適です。
彼ら自身のドキュメントには、サムネイルの作成をスケジュールするために使用されていることが示されていますが、最近この目的で使用したとき、ユーザーが待ち時間(30〜50秒)に感銘を受けないことにすぐに気付きました。
EC2ノードでRabbitMQを実行することはできますが、SQSほどスケーラブルではありませんが、クラスター化されるため、かなり遠くまで行くことができます。
IronMQを試すことができます。SQSのようにホストされ、先入れ先出しの注文を保証し、結果整合性の遅延がなく、非常にスケーラブルで、数分で稼働できます。
そのためのPHPライブラリは次のとおりです:https ://github.com/iron-io/iron_mq_php
免責事項:私はIron.ioで働いています
SQSのドキュメントがこれに答えます (太字は、質問に直接答えることに重点を置いています)。
Amazon SQS はメッセージの順序を維持するために最善を尽くしますが、キューの分散型の性質により、送信したとおりの順序でメッセージを受信することを保証することはできません。システムで順序を維持する必要がある場合は、受信時にメッセージを並べ替えることができるように、各メッセージにシーケンス情報を配置することをお勧めします。