Membuat Penunggu

Halaman ini menjelaskan cara membuat resource Waiter. Untuk mempelajari lebih lanjut waiter, baca Dasar-Dasar Runtime Configurator.

Resource Waiter menunggu kondisi berhasil atau gagal tertentu sebelum menampilkan respons. Untuk keberhasilan dan kegagalan, Anda menetapkan kondisi Kardinalitas, dengan waiter menunggu sejumlah variabel dibuat di bawah awalan jalur tertentu. Setelah variabel dibuat, waiter akan kembali. Kode aplikasi Anda kemudian dapat merespons keberhasilan atau kegagalannya. Jika status variabel saat ini sudah cocok dengan kondisi akhir berhasil atau gagal, waiter akan segera menampilkan keberhasilan atau kegagalan.

Sebelum memulai

Membuat penunggu

Untuk membuat penunggu:

  1. Tentukan kondisi keberhasilan, dan secara opsional, kondisi kegagalan untuk waiter.

    Misalnya, contoh kode berikut menetapkan kondisi keberhasilan dan kegagalan, dengan waiter berhasil jika jumlah jalur di /status/success adalah tiga dan gagal jika jalur di /status/failure adalah dua:

    {
        'name': 'projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]',
        'timeout': '360s',
        'success': {
           'cardinality': {
              'path': '/status/success',
              'number': 3
           }
        },
        'failure': {
           'cardinality': {
              'path': '/status/failure',
              'number': 2
           }
         }
    }
    

    Praktik terbaik untuk menentukan waiter:

    • Hanya satu kondisi berhasil dan satu kondisi gagal yang diizinkan per waiter.
    • Anda harus mempertahankan satu waiter per jalur.
    • Kondisi kegagalan selalu dievaluasi sebelum kondisi keberhasilan.
    • Jangan tumpang-tindih awalan jalur antar-kondisi.
  2. Buat penunggu.

    Deployment Manager

    Untuk membuat penunggu di Deployment Manager, tentukan jenis penunggu:

    runtimeconfig.v1beta1.waiter
    

    Di properti waiter, berikan name, location, timeout, dan kondisi akhir waiter:

    - name: [NAME]
      type: runtimeconfig.v1beta1.waiter
      properties:
        parent: $(ref.[CONFIG_NAME].name)
        waiter: [WAITER_NAME]
        timeout: [TIMEOUT_SECS]
        success:
          cardinality:
            path: [SUCCESS_PATH_PREFIX]
            number: [SUCCESS_NUMBER]
    

    dengan:

    • [NAME] adalah nama resource.
    • [CONFIG_NAME] adalah resource Config untuk permintaan ini.
    • [WAITER_NAME] adalah nama untuk waiter ini.
    • [TIMEOUT_SECS] adalah jumlah detik untuk menunggu sebelum waktu tunggu berakhir. Misalnya, untuk 300 detik, gunakan 300s.
    • [SUCCESS_PATH_PREFIX] adalah awalan jalur yang harus diperhatikan untuk kondisi berhasil.
    • [SUCCESS_NUMBER] adalah jumlah variabel yang ada di jalur ini agar dianggap berhasil.

    gcloud

    Dengan Google Cloud CLI:

    gcloud beta runtime-config configs waiters create [WAITER_NAME] \
        --config-name [CONFIG_NAME] \
        --success-cardinality-path [SUCCESS_PATH_PREFIX] \
        --success-cardinality-number [SUCCESS_NUMBER] --timeout [TIMEOUT_SECS]
    

    dengan:

    • [WAITER_NAME] adalah nama untuk waiter ini.
    • [CONFIG_NAME] adalah resource RuntimeConfig untuk permintaan ini.
    • [SUCCESS_PATH_PREFIX] adalah awalan jalur yang harus diperhatikan untuk kondisi berhasil.
    • [SUCCESS_NUMBER] adalah jumlah variabel yang ada di jalur ini agar dianggap berhasil.
    • [TIMEOUT_SECS] jumlah detik untuk menunggu sebelum waktu tunggu habis.

      gcloud CLI menampilkan respons seperti:

      Created [https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/example-waiter].

      Setelah membuat waiter, alat ini akan melakukan polling pada resource Operasi terkait hingga waiter menampilkan salah satu respons yang berlaku.

      Untuk referensi lengkap perintah gcloud ini, baca dokumentasi referensi runtime-config configs waiters.

    API

    Di API, buat permintaan POST ke URI berikut:

    https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters
    

    dengan:

    • [PROJECT_ID] adalah project ID untuk permintaan ini.
    • [CONFIG_NAME] adalah nama konfigurasi untuk permintaan ini.

    Payload permintaan harus berisi nama waiter, kondisi keberhasilan, dan durasi waktu tunggu:

    {
     'name': 'projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]',
     'timeout': '[TIMEOUT_SEC]',
     'success': {
        'cardinality': {
           'path': '[SUCCESS_PATH_PREFIX]',
           'number': '[SUCCESS_NUMBER]'
        }
      }
    }
    

    dengan:

    • [PROJECT_ID] adalah project ID untuk permintaan ini.
    • [CONFIG_NAME] adalah nama konfigurasi untuk permintaan ini.
    • [WAITER_NAME] adalah nama waiter yang akan dibuat.
    • [TIMEOUT_SECS] jumlah detik untuk menunggu sebelum waktu tunggu habis.
    • [SUCCESS_PATH_PREFIX] adalah awalan jalur yang harus diperhatikan untuk kondisi keberhasilan.
    • [SUCCESS_NUMBER] adalah jumlah variabel yang ada di jalur ini agar dianggap berhasil.

    Jika berhasil, permintaan akan menampilkan nama objek operasi yang Anda polling untuk penyelesaian:

    {
        "name": "projects/[PROJECT_ID]/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]"
    }
    

    Selanjutnya, lakukan polling pada pelayan untuk memeriksa secara berkala kapan pelayan kembali.

    Untuk mempelajari metode ini lebih lanjut, baca dokumentasi waiters().create.

Membuat polling penunggu

Setelah membuat waiter, polling resource Operasi terkait untuk memeriksa apakah waiter telah memenuhi salah satu kondisi akhir. Jika kondisi akhir telah terpenuhi atau waktu tunggu telah habis, operasi akan ditampilkan sebagai done dan menampilkan respons berdasarkan hasil waktu tunggu.

Gunakan gcloud atau API untuk melakukan polling pada waiter.

gcloud

Dengan Google Cloud CLI, saat Anda membuat permintaan untuk membuat penunggu, alat ini akan otomatis melakukan polling dan menunggu penunggu kembali. Alat ini mencetak respons seperti berikut saat melakukan polling pada penunggu:

Waiting for waiter [WAITER_NAME] to finish...

Jika Anda tidak ingin alat melakukan polling pada waiter setelah membuatnya, berikan flag --async dengan permintaan pembuatan Anda.

API

Di REST API, buat permintaan GET ke URI berikut untuk mendapatkan status operasi waiter:

https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]

dengan:

  • [PROJECT_ID] adalah project ID untuk permintaan ini.
  • [CONFIG_NAME] adalah nama konfigurasi untuk permintaan ini.
  • [WAITER_NAME] adalah nama waiter yang akan di-polling.

Jika operasi masih berlangsung, API akan menampilkan respons seperti berikut, tanpa status:

{
  "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]"
}

Jika operasi selesai, operasi akan ditandai sebagai done dan menampilkan salah satu respons yang dijelaskan di bagian Respons waiter.

Untuk mempelajari metode ini lebih lanjut, baca dokumentasi waiters().create.

Respons pelayan

Kondisi akhir yang berhasil

Jika waiter telah memenuhi kondisi akhir berhasil, operasi akan menampilkan resource Waiter:

{
  "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Waiter",
    "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]",
    "timeout": "360.000s",
    "failure": {
      "cardinality": {
        "path": "[SUCCESS_PATH_PREFIX]",
        "number": "[SUCCESS_NUMBER]"
      }
    },
    "success": {
      "cardinality": {
        "path": "[FAILURE_PATH_PREFIX]",
        "number": [FAILURE_NUMBER]
      }
    },
    "createTime": "2016-04-12T18:02:13.316695490Z",
    "done": true
  }
}

Kondisi kegagalan

Jika waiter memenuhi kondisi akhir kegagalan atau waktu tunggu habis, operasi akan menampilkan error.

Kondisi kegagalan terpenuhi

{
  "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]",
  "done": true,
  "error": {
    "code": 9,
    "message": "Failure condition satisfied."
  }
}

Waktu tunggu habis

{
  "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]",
  "done": true,
  "error": {
    "code": 4,
    "message": "Timeout expired."
  }
}

Langkah berikutnya