Kotlin에서 작업자 풀을 구현하여 WebDav를 통해 Hetzner StorageBox에 이미지 업로드
작업자 풀
최근 Go로 프로젝트를 수행하는 동안 병렬 처리를 수행하기 위해 Worker Pools on GoByExample을 발견했습니다. Kotlin에서 Worker Pools를 구현하기 위한 많은 리소스를 찾지 못했지만 현재 Spring Boot + Kotlin 웹앱에 좋은 아이디어인 것 같습니다.
코틀린
Kotlin은 고루틴과 매우 유사한 동시성을 위해 코루틴을 사용합니다.
코루틴은 구조화된 동시성을 사용하여 각 코루틴의 수명을 특정 범위로 구분합니다.
작업자 그룹을 생성하려면 애플리케이션이 실행되는 동안 지속되는 코루틴 범위를 생성해야 합니다. SupervisorJob() 컨텍스트를 사용하여 이 동작을 수행합니다.
private val coroutineScope = CoroutineScope(SupervisorJob() + Dispatchers.Default)
그런 다음 이미지 데이터 및 업로드할 URL에 대한 대기열로 버퍼링된 채널을 만듭니다.
val channel = Channel<Pair<String, ByteArray>>(10000)
저는 Spring @PostConstruct 주석을 사용하여 작업자 그룹을 만들고 채널에서 새 데이터를 수신합니다.
항목이 대기열에 있을 때마다 업로드 기능을 시작합니다. 대기열에 항목이 없으면 기능이 일시 중지됩니다.
@PostConstruct
fun createWorkerGroup() {
coroutineScope.launch {
for (x in 1..5) {
launch {
println("Create Worker $x")
while (true) {
uploadImage(channel.receive())
}
}
}
}
}
마지막으로 runBlocking 코루틴 범위 내 채널에 데이터를 보낼 수 있습니다.
runBlocking {
uploadService.channel.send(Pair(url, image.bytes))
}
WebDav
내 webapp 사용자는 휴대폰에서 내 웹 서버로 이미지를 업로드하고 나중에 S3 객체 스토리지에 대한 저렴한 대안으로 webdav를 통해 이 사진을 Hetzner Storage Box에 업로드하려고 합니다.
단순성을 위해 sardine java webdav 클라이언트 라이브러리를 사용합니다.
사용법은 매우 간단합니다. 다음을 사용하여 클라이언트를 구성합니다.
val sardine = SardineFactory.begin("webDavUsername", "webDavPassword")
uploadImage 함수는 이전에 생성한 채널을 통해 새 이미지가 전송될 때마다 호출됩니다. 이 함수에서 sarding.put()을 호출하여 이미지 파일을 저장합니다.
sardine.put("https://username.your-storagebox.de/foldername/imagename.jpg", ImageByteArray)
이것이 고도의 병렬 파일 서비스를 갖추기 위해 필요한 전부입니다.
Github에서 소스 코드를 볼 수 있습니다: UploadService.kt ImageService.kt
Reference
이 문제에 관하여(Kotlin에서 작업자 풀을 구현하여 WebDav를 통해 Hetzner StorageBox에 이미지 업로드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/tschuehly/implementing-worker-pools-in-kotlin-to-upload-images-over-webdav-to-a-hetzner-storagebox-2i64
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Kotlin은 고루틴과 매우 유사한 동시성을 위해 코루틴을 사용합니다.
코루틴은 구조화된 동시성을 사용하여 각 코루틴의 수명을 특정 범위로 구분합니다.
작업자 그룹을 생성하려면 애플리케이션이 실행되는 동안 지속되는 코루틴 범위를 생성해야 합니다. SupervisorJob() 컨텍스트를 사용하여 이 동작을 수행합니다.
private val coroutineScope = CoroutineScope(SupervisorJob() + Dispatchers.Default)
그런 다음 이미지 데이터 및 업로드할 URL에 대한 대기열로 버퍼링된 채널을 만듭니다.
val channel = Channel<Pair<String, ByteArray>>(10000)
저는 Spring @PostConstruct 주석을 사용하여 작업자 그룹을 만들고 채널에서 새 데이터를 수신합니다.
항목이 대기열에 있을 때마다 업로드 기능을 시작합니다. 대기열에 항목이 없으면 기능이 일시 중지됩니다.
@PostConstruct
fun createWorkerGroup() {
coroutineScope.launch {
for (x in 1..5) {
launch {
println("Create Worker $x")
while (true) {
uploadImage(channel.receive())
}
}
}
}
}
마지막으로 runBlocking 코루틴 범위 내 채널에 데이터를 보낼 수 있습니다.
runBlocking {
uploadService.channel.send(Pair(url, image.bytes))
}
WebDav
내 webapp 사용자는 휴대폰에서 내 웹 서버로 이미지를 업로드하고 나중에 S3 객체 스토리지에 대한 저렴한 대안으로 webdav를 통해 이 사진을 Hetzner Storage Box에 업로드하려고 합니다.
단순성을 위해 sardine java webdav 클라이언트 라이브러리를 사용합니다.
사용법은 매우 간단합니다. 다음을 사용하여 클라이언트를 구성합니다.
val sardine = SardineFactory.begin("webDavUsername", "webDavPassword")
uploadImage 함수는 이전에 생성한 채널을 통해 새 이미지가 전송될 때마다 호출됩니다. 이 함수에서 sarding.put()을 호출하여 이미지 파일을 저장합니다.
sardine.put("https://username.your-storagebox.de/foldername/imagename.jpg", ImageByteArray)
이것이 고도의 병렬 파일 서비스를 갖추기 위해 필요한 전부입니다.
Github에서 소스 코드를 볼 수 있습니다: UploadService.kt ImageService.kt
Reference
이 문제에 관하여(Kotlin에서 작업자 풀을 구현하여 WebDav를 통해 Hetzner StorageBox에 이미지 업로드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/tschuehly/implementing-worker-pools-in-kotlin-to-upload-images-over-webdav-to-a-hetzner-storagebox-2i64
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
val sardine = SardineFactory.begin("webDavUsername", "webDavPassword")
sardine.put("https://username.your-storagebox.de/foldername/imagename.jpg", ImageByteArray)
Reference
이 문제에 관하여(Kotlin에서 작업자 풀을 구현하여 WebDav를 통해 Hetzner StorageBox에 이미지 업로드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tschuehly/implementing-worker-pools-in-kotlin-to-upload-images-over-webdav-to-a-hetzner-storagebox-2i64텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)