使用Java SDK的Azure表查询延续令牌

时间:2013-08-02 10:48:14

标签: azure-table-storage azure-java-sdk

我正在编写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();

1 个答案:

答案 0 :(得分: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();
...