Halaman ini menjelaskan cara menggunakan Pub/Sub untuk mendapatkan notifikasi tentang peristiwa klinis di penyimpanan DICOM. Anda dapat menerima notifikasi Pub/Sub saat instance DICOM baru disimpan di penyimpanan DICOM atau diimpor dari Cloud Storage.
Anda dapat menggunakan notifikasi Pub/Sub untuk berbagai tujuan, seperti memicu pemrosesan downstream atau menganalisis data baru. Misalnya, model machine learning dapat menerima notifikasi saat data baru tersedia untuk pelatihan dan menghasilkan insight untuk meningkatkan perawatan pasien.
Gambar berikut menunjukkan cara notifikasi Pub/Sub dibuat dan dipublikasikan.
Gambar 1. Menerima notifikasi Pub/Sub tentang peristiwa klinis di penyimpanan DICOM.
Gambar 1 menunjukkan langkah-langkah berikut:
- Pemanggil membuat permintaan untuk menyimpan atau mengimpor instance DICOM.
- Penyimpanan DICOM menerima permintaan, membuat pesan Pub/Sub, dan mengirimkannya ke topik Pub/Sub yang dikonfigurasi di penyimpanan DICOM.
- Pub/Sub meneruskan pesan ke langganan yang terlampir ke topik.
- Pelanggan menerima pesan dari langganan mereka. Setiap langganan dapat memiliki satu atau beberapa pelanggan untuk meningkatkan paralelisme.
Sebelum memulai
Menambahkan izin publisher Pub/Sub
Untuk memublikasikan pesan dari Cloud Healthcare API ke Pub/Sub, Anda
harus menambahkan peran pubsub.publisher
ke
akun layanan Agen Layanan Cloud Healthcare project Anda.
Untuk mengetahui informasi selengkapnya, lihat Izin Pub/Sub untuk penyimpanan DICOM, FHIR, dan HL7v2.
Format dan konten notifikasi
Notifikasi Pub/Sub berisi objek Message
yang menyertakan informasi tentang peristiwa klinis. Objek Message
terlihat mirip dengan berikut ini:
{ "message": { "attributes": { "action": "ACTION", "lastUpdatedTime": "RFC_1123_FORMAT_DATETIME", "storeName": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID", "studyInstanceUID": "STUDY_UID", "seriesInstanceUID": "SERIES_UID", "sopInstanceUID": "INSTANCE_UID", "versionId": "VERSION_ID", "modality": "MODALITY", "storageClass": "STORAGE_CLASS", "previousStorageClass": "PREVIOUS_STORAGE_CLASS" }, "data": "BASE_64_ENCODED_DATA", "messageId": "MESSAGE_ID", "publishTime": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ" } }
Untuk mengetahui informasi selengkapnya tentang kolom yang disertakan dalam setiap pesan Pub/Sub, lihat ReceivedMessage
dan PubsubMessage
.
Tabel berikut menjelaskan setiap kolom dalam objek attributes
:
Atribut | Deskripsi | Contoh |
---|---|---|
action |
Tindakan yang terjadi pada resource DICOM. Nilai yang memungkinkan mencakup:
|
StoreInstances |
lastUpdatedTime |
Stempel waktu saat resource DICOM terakhir kali diubah. Stempel waktu menggunakan format RFC 1123. | Mon, 01 Jan 2020 00:00:00 UTC |
storeName |
Nama lengkap resource penyimpanan DICOM tempat tindakan terjadi. | projects/my-project/locations/us/datasets/my-dataset/dicomStores/my-dicom-store |
studyInstanceUID |
ID unik (UID) instance studi DICOM. | 1.2.3.4.5.6 |
seriesInstanceUID |
ID unik (UID) instance seri DICOM. | 1.2.3.4.5.6 |
sopInstanceUID |
ID unik (UID) instance SOP DICOM. | 1.2.3.4.5.6 |
versionId |
ID versi terbaru resource DICOM tempat tindakan terjadi. | MTY4MzA2MDQzOTI5NjIxMDAwMA |
modality |
Tag modalitas resource DICOM. Nilai yang memungkinkan mencakup, tetapi tidak terbatas pada:
|
CT |
storageClass |
Kelas penyimpanan resource DICOM. Nilai yang mungkin mencakup:
|
STANDARD |
previousStorageClass |
Kelas penyimpanan sebelumnya dari resource DICOM. Nilai yang memungkinkan mencakup:
|
NEARLINE |
Tabel berikut menjelaskan kolom yang tersisa dalam objek message
:
Kolom | Deskripsi |
---|---|
data |
String berenkode base64 dari ID berikut: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_UID/series/SERIES_UID/instances/INSTANCE_UID |
messageId |
ID untuk pesan Pub/Sub. |
publishTime |
Waktu saat server Pub/Sub memublikasikan pesan. |
Mengonfigurasi dan melihat notifikasi
Bagian ini menjelaskan cara mengaktifkan notifikasi Pub/Sub di penyimpanan DICOM, menyimpan atau mengimpor instance DICOM untuk memublikasikan notifikasi, dan melihat notifikasi.
Mengonfigurasi penyimpanan DICOM
Contoh berikut menunjukkan cara mengaktifkan notifikasi Pub/Sub di penyimpanan DICOM saat instance DICOM baru disimpan atau diimpor dari Cloud Storage.
REST
Gunakan metode projects.locations.datasets.dicomStores.patch
.
Nilai
NotificationConfig.sendForBulkImport
adalah true
, sehingga notifikasi dikirim saat mengimpor data dari Cloud Storage.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_ID
: ID Google Cloud project AndaLOCATION
: lokasi set dataDATASET_ID
: set data induk DICOM storeDICOM_STORE_ID
: ID penyimpanan DICOMPUBSUB_TOPIC
: topik Pub/Sub tempat pesan dipublikasikan saat peristiwa terjadi di penyimpanan data
Meminta isi JSON:
{ "notificationConfig": { "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC", "sendForBulkImport": "true" } }
Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:
curl
Simpan isi permintaan dalam file bernama request.json
.
Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:
cat > request.json << 'EOF' { "notificationConfig": { "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC", "sendForBulkImport": "true" } } EOF
Kemudian, jalankan perintah berikut untuk mengirim permintaan REST Anda:
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID?updateMask=notificationConfig"
PowerShell
Simpan isi permintaan dalam file bernama request.json
.
Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:
@' { "notificationConfig": { "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC", "sendForBulkImport": "true" } } '@ | Out-File -FilePath request.json -Encoding utf8
Kemudian jalankan perintah berikut untuk mengirim permintaan REST Anda:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID?updateMask=notificationConfig" | Select-Object -Expand Content
APIs Explorer
Salin isi permintaan dan buka halaman referensi metode. Panel APIs Explorer terbuka di sisi kanan halaman. Anda bisa berinteraksi dengan alat ini untuk mengirim permintaan. Tempelkan isi permintaan di alat ini, lengkapi kolom lainnya yang wajib diisi, lalu klik Jalankan.
Anda akan menerima respons yang mirip dengan berikut ini.
Jika Anda mengonfigurasi kolom apa pun di resource DicomStore
, kolom tersebut juga akan muncul dalam respons.
gcloud
Jalankan perintah gcloud healthcare dicom-stores update
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
PROJECT_ID
: ID Google Cloud project AndaLOCATION
: lokasi set dataDATASET_ID
: set data induk DICOM storeDICOM_STORE_ID
: ID penyimpanan DICOMPUBSUB_TOPIC
: topik Pub/Sub tempat pesan dipublikasikan saat peristiwa terjadi di penyimpanan data
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud healthcare dicom-stores update DICOM_STORE_ID \ --dataset=DATASET_ID \ --location=LOCATION \ --pubsub-topic=projects/PROJECT_ID/topics/PUBSUB_TOPIC \ --send-for-bulk-import
Windows (PowerShell)
gcloud healthcare dicom-stores update DICOM_STORE_ID ` --dataset=DATASET_ID ` --location=LOCATION ` --pubsub-topic=projects/PROJECT_ID/topics/PUBSUB_TOPIC ` --send-for-bulk-import
Windows (cmd.exe)
gcloud healthcare dicom-stores update DICOM_STORE_ID ^ --dataset=DATASET_ID ^ --location=LOCATION ^ --pubsub-topic=projects/PROJECT_ID/topics/PUBSUB_TOPIC ^ --send-for-bulk-import
Anda akan melihat respons seperti berikut:
Respons
Updated dicomStore [DICOM_STORE_ID]. ... name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID notificationConfig: pubsubTopic: projects/PROJECT_ID/topics/PUBSUB_TOPIC sendForBulkImport: true
Menyimpan atau mengimpor instance DICOM dan melihat notifikasi Pub/Sub
Untuk menyimpan atau mengimpor instance DICOM dan menarik pesan Pub/Sub yang dihasilkan, selesaikan langkah-langkah berikut:
Menyimpan atau mengimpor instance DICOM. Permintaan ini menyebabkan Cloud Healthcare API memublikasikan pesan ke topik Pub/Sub yang dikonfigurasi.
Tarik pesan. Jika Anda mengimpor beberapa instance DICOM dalam satu permintaan, pesan akan dibuat untuk setiap instance DICOM.
Untuk melihat izin Identity and Access Management yang diperlukan untuk menarik pesan Pub/Sub, lihat Kontrol akses untuk Pub/Sub.
REST
Gunakan metode
projects.subscriptions.pull
. Contoh berikut menggunakan parameter kueri?maxMessages=10
untuk menentukan jumlah maksimum pesan yang akan ditampilkan dalam permintaan. Sesuaikan nilai ini dengan kasus penggunaan Anda.Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_ID
: ID Google Cloud project AndaPUBSUB_SUBSCRIPTION_ID
: ID langganan yang dilampirkan ke topik Pub/Sub yang dikonfigurasi di DICOM store
Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:
curl
Jalankan perintah berikut:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://pubsub.googleapis.com/v1/projects/PROJECT_ID/subscriptions/PUBSUB_SUBSCRIPTION_ID:pull?maxMessages=10"PowerShell
Jalankan perintah berikut:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://pubsub.googleapis.com/v1/projects/PROJECT_ID/subscriptions/PUBSUB_SUBSCRIPTION_ID:pull?maxMessages=10" | Select-Object -Expand ContentAPIs Explorer
Buka halaman referensi metode. Panel APIs Explorer terbuka di sisi kanan halaman. Anda bisa berinteraksi dengan alat ini untuk mengirim permintaan. Lengkapi kolom yang wajib diisi, lalu klik Jalankan.
Anda akan melihat respons JSON seperti berikut:
gcloud
Jalankan perintah
gcloud pubsub subscriptions pull
.Contoh ini menggunakan flag Google Cloud CLI berikut:
--limit=10
: Menampilkan maksimal 10 pesan. Sesuaikan nilai ini dengan kasus penggunaan Anda.--format=json
: Merender output sebagai JSON.--auto-ack
: Secara otomatis mengonfirmasi setiap pesan yang ditarik.
Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:
PROJECT_ID
: ID Google Cloud project AndaPUBSUB_SUBSCRIPTION_ID
: ID langganan yang dilampirkan ke topik Pub/Sub yang dikonfigurasi di DICOM store
Jalankan perintah berikut:
Linux, macOS, atau Cloud Shell
gcloud pubsub subscriptions pull \ projects/PROJECT_ID/subscriptions/PUBSUB_SUBSCRIPTION_ID \ --limit=10 \ --auto-ack \ --format=json
Windows (PowerShell)
gcloud pubsub subscriptions pull ` projects/PROJECT_ID/subscriptions/PUBSUB_SUBSCRIPTION_ID ` --limit=10 ` --auto-ack ` --format=json
Windows (cmd.exe)
gcloud pubsub subscriptions pull ^ projects/PROJECT_ID/subscriptions/PUBSUB_SUBSCRIPTION_ID ^ --limit=10 ^ --auto-ack ^ --format=json
Anda akan melihat respons seperti berikut:
[ { "ackId": "RFAGFixdRkhRNxkIaFEOT14jPzUgKEUaAggUBXx9cEFLdVhUcGhRDRlyfWB9bQ5GAgpGWixfURsHaE5tdR", "ackStatus": "SUCCESS", "message": { "attributes": { "action": "ImportDicomData", "lastUpdatedTime": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ", "storeName": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID", "studyInstanceUID": "1.3.6.1.4.1.1129.5.111396399361969898205364400549799252857604", "seriesInstanceUID": "1.3.6.1.4.1.1129.5.111396399361969898205364400549799252857605", "sopInstanceUID": "1.3.6.1.4.1.1129.5.111396399361969898205364400549799252857606", "versionId": "MTY4MzA2MDQzOTI5NjIxMDAwMA", "modality": "CT", "storageClass": "STANDARD", }, "data": "cHJvamVjdHMvbXlwcm9qZWN0L2xvY2F0aW9ucy91cy1jZW50cmFsMS9kYXRhc2V0cy9teS1kYXRhc2V0L2RpY29tU3RvcmVzL215LWRpY29tLXN0b3JlL2RpY29tV2ViL3N0dWRpZXMvMS4zLjYuMS40LjEuMTExMjkuNS41LjExMTM5NjM5OTM2MTk2OTg5ODIwNTM2NDQwMDU0OTc5OTI1Mjg1NzYwNC9zZXJpZXMvMS4zLjYuMS40LjEuMTExMjkuNS41LjE5NTYyODIxMzY5NDMwMDQ5ODk0Njc2MDc2NzQ4MTI5MTI2MzUxMTcyNC9pbnN0YW5jZXMvMS4zLjYuMS40LjEuMTExMjkuNS41LjE1Mzc1MTAwOTgzNTEwNzYxNDY2NjgzNDU2MzI5NDY4NDMzOTc0NjQ4MA==", "messageId": "7586159156345265", "publishTime": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ" } } ]
Kebijakan penyimpanan pesan Cloud Healthcare API dan Pub/Sub
Untuk memastikan bahwa data Cloud Healthcare API Anda dan data terkait dalam pesan Pub/Sub berada di region yang sama, Anda harus menetapkan kebijakan penyimpanan pesan Pub/Sub.
Anda harus menetapkan kebijakan penyimpanan pesan secara eksplisit pada topik Pub/Sub yang dikonfigurasi di penyimpanan data untuk memastikan data tetap berada di region yang sama. Misalnya, jika set data dan penyimpanan FHIR Cloud Healthcare API Anda berada di
us-central1
, kebijakan penyimpanan pesan hanya boleh mengizinkan region us-central1
.
Untuk mengonfigurasi kebijakan penyimpanan pesan, lihat Mengonfigurasi kebijakan penyimpanan pesan.
Memecahkan masalah pesan Pub/Sub yang terlewat
Jika notifikasi tidak dapat dipublikasikan ke Pub/Sub, error akan dicatat ke dalam log di Cloud Logging. Untuk mengetahui informasi selengkapnya, lihat artikel Melihat log error di Cloud Logging.
Jika frekuensi pembuatan error melebihi batas, error yang melebihi batas tidak akan dikirimkan ke Cloud Logging.
Langkah berikutnya
- Menangani lonjakan sementara dengan kontrol alur
- Menangani kegagalan pesan
- Memutar ulang dan menghapus permanen pesan
- Ringkasan arsitektur Pub/Sub