クライアントの作成
- 直接作成 (Table Store エンドポイントを使用してクライアントを作成)。
Endpoint ep("YourEndpoint", "YourInstance"); Credential cr("AccessKeyId", "AccessKeySecret"); ClientOptions opts; AsyncClient* client = NULL; Optional<OTSError> res = AsyncClient::create(client, ep, cr, opts);
重要 プライマリアカウントの AccessKey を使用して Table Store にアクセスしないでください。 一時的なトークンまたはサブアカウントの AccessKey を使用することを推奨します。 一時的な STS トークンを使用する場合は、前述のコードの資格情報オブジェクトを次のように変更する必要があります。Credential cr("AccessKeyId", "AccessKeySecret", "SecurityToken");
設定アイテムの詳細については「同期インターフェイス」をご参照ください。
- SyncClient から構築します。
SyncClient& sync = ... ; AsyncClient* async = AsyncClient::create(sync);
テーブル操作
非同期インターフェイスの使用方法を示すために、ここでは例としてテーブル操作を使用します。
準備
2 つの関数が用意されている必要があります。
- リクエストオブジェクト
関数シグネチャ
listTable
は以下の通りです。
最初のパラメーターは可変参照です (対照的に、同期インターフェイスは不変参照です)。void listTable( ListTableRequest&, const std::tr1::function<void( ListTableRequest&, util::Optional<OTSError>&, ListTableResponse&)>&);
listTable()
が戻された後 (この時点では、リストテーブル操作は完了していません)、渡されたListTableRequest
オブジェクトは変更されていたり破壊されたりして、調べるのが難しいわかりにくいエラーが紛れ込む可能性があります。 この種の問題を回避するために、非同期クライアントは渡された要求オブジェクトの内容を (コピーせずに) 内部ストレージに転送します。 つまり、listTable()
を呼び出した後、渡されたオブジェクトを変更できます。 - コールバック関数
コールバック関数は値を返しません。 3 種類の受信パラメーターは次のとおりです。
-
リクエストオブジェクト 。これは、ユーザーが
listTable()
を呼び出したときに渡されるリクエストオブジェクトです。 コールバックの後、非同期クライアントはリクエストオブジェクトを必要としなくなり、可変参照の形でユーザーのコールバック関数に戻されます。 これにより、ユーザーはリクエストオブジェクトの内容を転送できます。 -
オプションにラップされているエラーオブジェクト。 エラーが存在しない場合は、このオブジェクトの
present()
メソッドは false を返します。 -
レスポンスオブジェクト。 リクエストオブジェクトと同様に、レスポンスオブジェクトも可変参照の形でコールバック関数に返されます。 エラーが存在する場合、レスポンスオブジェクトは有効なオブジェクト (破壊される可能性があるもの) でなければなりません。 ただし、レスポンスオブジェクトの内容は未定義です。
注- 非同期クライアントは、すべてのリクエストコールバックが一度だけ呼び出されるようにします。
- 理論的には、
listTable()
が返される前にコールバック関数を呼び出すことができます。
-
例
void listTableCallback(
ListTableRequest&,
Optional<OTSError>& err,
ListTableResponse& resp)
{
if (err.present()) {
// 処理中のエラー
} else {
const IVector<string>& xs = resp.tables();
for(int64_t i = 0; i < xs.size(); ++i) {
cout << xs[i] << endl;
}
}
}
void listTable(AsyncClient& client)
{
ListTableRequest req;
client.listTable(req, listTableCallback);
}