IronMQ はユーザーのタスクを処理しません。Celery が実行する必要があるジョブを追跡するためのバックエンドとして機能するだけです。
それで、これが何が起こるかです。Web サーバーと Celery サーバーの 2 つのサーバーがあるとします。Web サーバーはリクエストの処理を担当し、Celery サーバーはサムネイルを作成して S3 にアップロードします。一般的なリクエストは次のようになります。
- ユーザーが画像を Web サーバーにアップロードします。
- そのイメージをどこかに保存します。個人的には、すぐに S3 に配置することをお勧めしますが、IronCache、base64 エンコードなどに保存することもできます。ポイントは、Celery サーバーがアクセスできる場所に配置することです。
- Celery でジョブをキューに入れ、画像の場所を Celery サーバーに渡します。
- Celery サーバーが画像をダウンロードし、サムネイルを生成して、S3 にアップロードします。次に、S3 URL をジョブ結果に保存します。
- Web サーバーはジョブが終了するまで待機し、その後結果にアクセスできます。または、Celery サーバーに結果をデータベース自体に保存させることもできます。要点は、Celery サーバーが手間のかかる作業 (サムネイルの生成) を実行し、実行中に要求ループを保持しないことです。
Heroku で IronMQ を使用する例を作成しました。ここで確認できます: http://iron-celery-demo.herokuapp.com。Githubで例のソースを確認し、チュートリアルを読むことができます。このチュートリアルでは、Celery を Heroku にデプロイする方法を非常に詳細かつ段階的に説明しています。
AMQP をクリアするには:
- IronMQ は、Iron.io によって開発されたクラウドベースのメッセージ キュー サービスです。
- AMQP はオープン メッセージング仕様です。
- RabbitMQ は、AMQP 仕様の (私が知っている) 最も一般的な実装です。
- PyAMQP は、Python クライアントが RabbitMQ を含む AMQP の任意の実装と通信できるようにする Python ライブラリです。
IronMQ と RabbitMQ/AMQP の最大の違いの 1 つは、IronMQ がホストおよび管理されるため、自分でサーバーをホストしてアップタイムを心配する必要がないことです。仕様は差別化の点でより多くを提供し、根本的な違いがありますが、Celery はそれらのほとんどを抽象化します。Celery を使用しているため、気付くと思われる唯一の違いは、IronMQ がホストされているため、独自のサーバーを立ち上げて管理する必要がないことです。
完全な開示: 私は、IronMQ の背後にある会社である Iron.io に勤務しています。