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