Аннотация @Async серверной части Java Spring Boot не работает на сервере службы приложений Azure при загрузке файла в хрJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Аннотация @Async серверной части Java Spring Boot не работает на сервере службы приложений Azure при загрузке файла в хр

Сообщение Anonymous »

Итак, у нас есть серверная часть Java Spring Boot, работающая в контейнере службы приложений Azure. Использование BLOB-объектов хранилища Azure для хранения файлов. В определенном методе службы контроллера мы пытаемся загрузить файл очень большого размера, около 200 МБ. Файл загружается нормально локально. Проблема возникает при попытке загрузки на сервер службы приложений Azure. Когда процесс загрузки файла достигнет 300 секунд, время соединения истечет. Прочтите, что увеличить этот лимит времени невозможно из-за балансировщиков нагрузки Azure. В частности, в потоке журнала мы видим:
ошибку подключения файла
Чтобы обойти эту проблему. Пытались использовать аннотацию @Async Spring, чтобы контроллер немедленно возвращал ответ, пока файл продолжает загружаться в фоновом режиме. Убедился, что метод Async находится в собственном классе. И убедился, что в файл с аннотацией @Configuration добавлена ​​аннотация @EnableAsync. При локальном запуске все выглядит нормально и работает асинхронно, как и должно быть. Но как только это будет предпринято на сервере Azure, кажется, что тег Async пропущен, и он снова запускается синхронно. Пытаюсь разобраться, в чем причина этого. Что-то связанное с его запуском в Службе приложений Azure
Это мой первый пост, поэтому извините, если что-то в моем вопросе не отформатировано в соответствии со стандартом Stack Overflow. Спасибо!
FileService.java

Код: Выделить всё

 public FileDTO uploadFile(FileDTO fileDTO)
{

//Access blob container where files are stored
BlobContainerClient containerClient = new BlobContainerClientBuilder()
.connectionString(CONNECTION_STRING)
.containerName(fileDTO.getContainerName() + calendar.get(Calendar.YEAR)+"/"+   (calendar.get(Calendar.MONTH)+1)+"/" +calendar.get(Calendar.DATE))
.httpClient(httpClient).buildClient();

//Create blob client which contains file data
BlobClient blob = containerClient.getBlobClient(fileDTO.getFileName());

//Upload file
FileServiceAsyncImpl fileServiceAsync1 = new FileServiceAsyncImpl();

fileServiceAsync1.uploadAsync(blob, parallelUploadOptions, timeout);
}
FileServiceAsync.java

Код: Выделить всё

@Async
public void uploadAsync(BlobClient blob, BlobParallelUploadOptions parallelUploadOptions, Duration timeout)
{
//Try to upload file using parallel upload options
Response response = blob.uploadWithResponse(parallelUploadOptions, timeout, null);
//blob.upload(fileData, true);

System.out.println("Upload Status: "+response.getStatusCode());
System.out.println(response.getValue().toString());
}
Config.java

Код: Выделить всё

@Configuration
@EnableAsync
public class Config
{
//Some config...
}
Попробовал использовать метод @Async и ожидал, что файл будет загружен асинхронно. Однако в Службе приложений Azure он загружается синхронно

Подробнее здесь: https://stackoverflow.com/questions/789 ... ervice-ser
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»