メインコンテンツまでスキップ

Asyncオプション

非同期データベース・アダプタの使用例をいくつか紹介します。

Diesel

Dieselの現在のバージョン(v1/v2)は非同期操作をサポートしていません。したがって、データベース操作をActixランタイムのスレッドプールにオフロードするために、web::block関数を使用することが重要です。

アプリケーションがデータベースに対して実行するすべての操作に対応して、アクション関数を作成することができます。


ここで、r2d2などのクレートを使用して、データベースプールをセットアップする必要があります。これは、アプリで多くの DB 接続を利用できるようにするものです。これは、複数のハンドラが同時にDB を操作でき、なおかつ新しい接続を受け入れることができることを意味します。単純に、アプリのステートにあるプールを利用します。(この場合、プールが共有アクセスを処理するため、ステート・ラッパー構造体を使用しない方が良いでしょう。)


さて、リクエストハンドラで、Data<T> エクストラクタを使用して、アプリのステートからプールを取得し、そこから接続を取得します。これにより、web::blockクロージャに渡すことが可能な、所有権を保持した状態のデータベース接続(owned database connection)が提供されます。そして、必要な引数でアクション関数を呼び出し、結果を待つ(.await)だけです。

この例では、エラーをHttpResponseにマップしてから?演算子を使用していますが、戻り値のエラータイプがResponseErrorを実装している場合は、この方法は必要ありません。


以上です。

より詳細なDieselサンプルは下記をご参照ください。 https://github.com/actix/examples/tree/master/databases/diesel