Итак, у меня есть функция, которая просто загружает текст из хранилища BLOB-объектов каждые 10 минут и проверяет результат. Эта функция может работать в течение нескольких дней. Но он часто (примерно каждый день) терпит неудачу, прежде чем закончить со следующей ошибкой.
Причина: com.microsoft.azure.storage.StorageException: условие, указанное с помощью условных заголовков HTTP, не выполняется.
Мой код довольно прост.
public String downloadTextBlob(CloudBlobDirectory dir, String filename) {
try {
return dir.getBlockBlobReference(filename).downloadText();
} catch (StorageException | IOException | URISyntaxException e) {
throw new WorkbenchRuntimeException(e.getMessage(), e);
}
}
Я опубликовал ту же проблему здесь, и меня заинтересовал ответ, в котором говорилось об использовании OperationContext для решения проблемы. Но вопрос был не о Java, и ответ на самом деле не объяснял, что он на самом деле делает.
Вот предлагаемое решение (не java-код)
OperationContext context = new OperationContext();
context.SendingRequest += (sender, e) => {
e.Request.Headers["if-match"] = "*";
};
Может ли кто-нибудь объяснить, что это на самом деле делает? И, возможно, как я могу воспроизвести это в Java, я заметил, что в SDK хранилища Azure Azure есть OperationContext, и что я могу вызвать .downloadText() с контекстом операции в качестве параметра. Я просто не уверен, что делать с OperationContext.