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

您没有看到延续的原因是您正在通过为您处理延续的迭代执行查询。如果您使用 ExecuteQuerySegmented 方法,您将收到一个 ResultSegment 对象,其中包含结果段和 continuationtoken。

如果您只需要访问标头,则可以使用 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 回答