0

Azure Java SDK でページネーションのロジックを書いています。明らかな考えは、最後に取得した行の RowKey を保存し、次回のクエリでそれを使用することです。ただし、複数のパーティションにまたがるクエリの場合は、応答ヘッダーから x-ms-continuation-NextPartitionKey および x-ms-continuation-NextRowKey 継続トークンを取得する必要があります。C# の例 ( http://msdn.microsoft.com/en-us/library/dd135718.aspx ) を見たことがありますが、同等の Java を見つけることができません。

Azure Java-SDK を使用してこれらの継続トークンを取得するにはどうすればよいですか? CloudTableClient.execute を使用して TableResult を取得しています。

TableQuery<DynamicTableEntity> myQuery = TableQuery
                    .from("test", DynamicTableEntity.class)
                    .where(where_condition).take(size);
CloudTableClient client = Table.getInstance().getConnection();
Iterator<DynamicTableEntity> rows = client.execute(query).iterator();
4

1 に答える 1

1

継続が表示されない理由は、継続を処理する iterable を介してクエリを実行しているためです。ExecuteQuerySegmented メソッドを使用すると、結果のセグメントと継続トークンの両方を含む ResultSegment オブジェクトを受け取ります。

単にヘッダーへのアクセスが必要な場合は、OperationContext で getResponseReceivedEventHandler を使用できます。これにより、サービスに送信されるすべての要求に対して HTTPUrlConnection にアクセスできます。

例えば ​​:

OperationContext opContext = new OperationContext();
opContext.getResponseReceivedEventHandler().addListener(new StorageEvent<ResponseReceivedEvent>() {

        @Override
        public void eventOccurred(ResponseReceivedEvent eventArg) {
            HttpURLConnection conn = (HttpURLConnection) eventArg.getConnectionObject();

            // Access headers here
        }
    });

Iterator<DynamicTableEntity> rows = client.execute(query, null /* requestOptions */, opContext).iterator();
...

ジョー

于 2013-08-05T16:34:18.343 に答える