Klien Cloud Storage di Library Klien Cloud untuk Rust menulis objek dengan
menarik potongan payload dari jenis yang mengimplementasikan trait StreamingSource.
Beberapa aplikasi menghasilkan data dalam tugas atau thread terpisah dan perlu mengirimkan
bagian payload ke upload.
Dokumen ini menunjukkan cara menggabungkan penerima saluran asinkron dalam
implementasi StreamingSource sehingga Anda dapat mengirim data ke
penulisan objek Cloud Storage. Jika Anda baru menggunakan library klien, lihat
Menggunakan Cloud Storage dengan Rust terlebih dahulu.
Sebelum memulai
Sebelum menjalankan kode dalam dokumen ini, selesaikan prasyarat berikut:
- Buat atau pilih projectGoogle Cloud dengan penagihan diaktifkan.
- Buat bucket Cloud Storage di project Anda.
- Konfigurasikan Kredensial Default Aplikasi dan berikan peran Identity and Access Management (IAM) kepada akun utama Anda dengan izin untuk membuat objek di bucket, seperti Storage Object User (
roles/storage.objectUser).
Dependensi
Tambahkan library klien Cloud Storage dan crate pendukung yang digunakan dalam dokumen ini ke file Cargo.toml Anda:
cargo add google-cloud-storage anyhow bytes
cargo add tokio --features rt,sync
Mengonversi penerima antrean menjadi sumber streaming
Untuk memisahkan tugas yang menghasilkan data dari tugas yang mengupload payload,
hubungkan keduanya dengan antrean asinkron. Dokumen ini menggunakan saluran mpsc Tokio, meskipun Anda dapat menggunakan saluran atau antrean apa pun yang terintegrasi dengan runtime asinkron Anda.
Untuk menyesuaikan penerima saluran ke dalam implementasi StreamingSource, selesaikan
langkah-langkah berikut:
Tentukan struct yang menggabungkan saluran
Receiver:Terapkan trait
StreamingSourceuntuk struct wrapper sehingga setiap panggilan kenextmenunggu potongan berikutnya dari penerima:
Melakukan streaming data dari antrean ke Cloud Storage
Setelah mengimplementasikan trait StreamingSource, Anda dapat memunculkan upload objek
dalam tugas latar belakang dan mengirim potongan melalui saluran dari tugas
produsen Anda. Karena penerima saluran adalah sumber data sekali-proses yang tidak
mengimplementasikan Seek, mulai upload menggunakan send_buffered, bukan
send_unbuffered.
Di dalam fungsi async yang menerima bucket_name dalam format
projects/_/buckets/BUCKET_ID dan object_name, selesaikan
langkah-langkah berikut:
Lakukan inisialisasi klien
Storage:Buat saluran
mpscterbatas untuk mendapatkan handlesenderdanreceiver:Konfigurasikan upload objek dengan
QueueSource(receiver)sebagai sumber payload. Jangan menunggu futuresend_buffered:Buat tugas latar belakang untuk mendorong upload saat produsen Anda membuat data:
Dalam tugas produsen, kirim potongan data ke handle
sender:Setelah mengirim semua data, hapus handle
senderuntuk menutup saluran dan memberi sinyal akhir aliran objek:Tunggu pengendali tugas latar belakang untuk memverifikasi bahwa tugas dan permintaan upload berhasil, lalu ambil metadata
Objectyang diupload:
Pembersihan
Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan dalam dokumen ini, hapus objek pengujian yang Anda upload setelah selesai.
Kode lengkap
Contoh berikut menggabungkan semua langkah sebelumnya menjadi fungsi yang lengkap: