Auf dieser Seite wird die Verwendung von Pub/Sub beschrieben. um Benachrichtigungen über klinische Ereignisse in einem DICOM-Speicher zu erhalten. Sie können Pub/Sub-Benachrichtigungen erhalten, wenn eine neue DICOM-Instanz gespeichert wird in einem DICOM-Speicher gespeichert oder aus Cloud Storage importiert werden.
Sie können Pub/Sub-Benachrichtigungen für verschiedene Zwecke verwenden, z. B. und das Auslösen einer nachgelagerten Verarbeitung oder der Analyse neuer Daten. Beispiel: kann das ML-Modell Benachrichtigungen, wenn neue Daten für Training und Generierung zur Verbesserung der Patientenversorgung.
In der folgenden Abbildung wird dargestellt, wie Pub/Sub-Benachrichtigungen generiert und veröffentlicht werden.
Abbildung 1. Pub/Sub-Benachrichtigungen über klinische Ereignisse in einem DICOM-Speicher empfangen.
Abbildung 1 zeigt die folgenden Schritte:
- Ein Aufrufer stellt eine Anfrage zum Speichern oder Importieren einer DICOM-Instanz.
- Der DICOM-Speicher empfängt die Anfrage, erstellt eine Pub/Sub-Nachricht und sendet sie an das Pub/Sub-Thema, das für den DICOM-Speicher konfiguriert wurde.
- Pub/Sub leitet die Nachricht an die angehängten Abos weiter zum Thema.
- Die Abonnenten erhalten die Nachricht über ihr Abo. Jedes Abo kann einen oder mehrere Abonnenten haben, um die Parallelität zu erhöhen.
Hinweise
Pub/Sub-Publisher-Berechtigungen hinzufügen
Um Nachrichten aus der Cloud Healthcare API in Pub/Sub zu veröffentlichen, müssen Sie
muss die Rolle pubsub.publisher
hinzufügen zu
das Dienstkonto des Cloud Healthcare Service Agent Ihres Projekts.
Weitere Informationen finden Sie unter Pub/Sub-Berechtigungen für DICOM-, FHIR- und HL7v2-Speicher.
Benachrichtigungsformat und -inhalt
Eine Pub/Sub-Benachrichtigung enthält eine Message
Objekt, das Folgendes enthält:
Informationen zum klinischen Ereignis. DICOM-Pub/Sub-Benachrichtigungen
Das Feld attributes
muss enthalten sein. Das Objekt Message
sieht aus,
etwa so:
{ "message": { "data": "BASE_64_ENCODED_DATA", "messageId": "MESSAGE_ID", "publishTime": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ" } }
Der Wert im Feld data
ist die folgende Kennung als Base64-codierter String: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_UID/series/SERIES_UID/instances/INSTANCE_UID
Weitere Informationen zu den in jeder Pub/Sub-Nachricht enthaltenen Feldern finden Sie unter ReceivedMessage
und PubsubMessage
.
Benachrichtigungen konfigurieren und ansehen
In diesem Abschnitt wird beschrieben, wie Sie Pub/Sub-Benachrichtigungen für einen DICOM-Speicher aktivieren, eine DICOM-Instanz speichern oder importieren, um eine Benachrichtigung zu veröffentlichen, und die Benachrichtigung aufrufen.
DICOM-Speicher konfigurieren
Die folgenden Beispiele zeigen, wie Pub/Sub-Benachrichtigungen aktiviert werden in einem DICOM-Speicher, wenn eine neue DICOM-Instanz gespeichert oder aus Cloud Storage importiert wird.
REST
Verwenden Sie die Methode projects.locations.datasets.dicomStores.patch
.
Der Wert für NotificationConfig.sendForBulkImport
ist true
. Daher werden beim Importieren von Daten aus Cloud Storage Benachrichtigungen gesendet.
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
PROJECT_ID
ist die ID Ihres Google Cloud-ProjektsLOCATION
ist der Standort des DatasetsDATASET_ID
ist das übergeordnete Dataset des DICOM-SpeichersDICOM_STORE_ID
: die ID des DICOM-SpeichersPUBSUB_TOPIC
: ein Pub/Sub-Thema, in dem Nachrichten veröffentlicht werden, wenn ein Ereignis in einem Datenspeicher auftritt
JSON-Text der Anfrage:
{ "notificationConfig": { "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC", "sendForBulkImport": "true" } }
Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:
curl
Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json
.
Führen Sie folgenden Befehl im Terminal aus, um diese Datei im aktuellen Verzeichnis zu erstellen oder zu überschreiben:
cat > request.json << 'EOF' { "notificationConfig": { "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC", "sendForBulkImport": "true" } } EOF
Führen Sie dann folgenden Befehl aus, um Ihre REST-Anfrage zu senden:
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
Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json
.
Führen Sie folgenden Befehl im Terminal aus, um diese Datei im aktuellen Verzeichnis zu erstellen oder zu überschreiben:
@' { "notificationConfig": { "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC", "sendForBulkImport": "true" } } '@ | Out-File -FilePath request.json -Encoding utf8
Führen Sie dann folgenden Befehl aus, um Ihre REST-Anfrage zu senden:
$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
Kopieren Sie den Anfragetext und öffnen Sie die Referenzseite für Methoden. Der API Explorer wird rechts auf der Seite geöffnet. Sie können mit diesem Tool interagieren, um Anfragen zu senden. Fügen Sie den Anfragetext in dieses Tool ein, füllen Sie alle Pflichtfelder aus und klicken Sie auf Ausführen.
Sie sollten eine Antwort ähnlich der folgenden erhalten:
Wenn Sie in der Ressource DicomStore
Felder konfiguriert haben, werden diese auch in der Antwort angezeigt.
gcloud
Führen Sie den Befehl gcloud healthcare dicom-stores update
aus.
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
PROJECT_ID
: die ID Ihres Google Cloud-ProjektsLOCATION
ist der Standort des DatasetsDATASET_ID
ist das übergeordnete Dataset des DICOM-SpeichersDICOM_STORE_ID
: die ID des DICOM-SpeichersPUBSUB_TOPIC
: ein Pub/Sub-Thema, in dem Nachrichten veröffentlicht werden, wenn ein Ereignis in einem Datenspeicher auftritt
Führen Sie folgenden Befehl aus:
Linux, macOS oder 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
Sie sollten eine Antwort ähnlich der folgenden erhalten:
Antwort
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
DICOM-Instanz speichern oder importieren und Pub/Sub-Benachrichtigung ansehen
Um eine DICOM-Instanz zu speichern oder zu importieren und die generierte Pub/Sub-Nachricht abzurufen, führen Sie die folgenden Schritte aus:
Store oder import eine DICOM-Instanz. Durch die Anfrage wird die Cloud Healthcare API veranlasst, eine Nachricht im konfigurierten Pub/Sub-Thema zu veröffentlichen.
Rufen Sie die Nachricht ab. Wenn Sie mehrere DICOM-Instanzen in einer einzelnen Anfrage enthalten, wird für jede DICOM-Instanz eine Nachricht generiert.
Um die Berechtigungen der Identity and Access Management aufzurufen, die für den Abruf von Pub/Sub-Nachrichten finden Sie unter Zugriffssteuerung für Pub/Sub.
REST
Verwenden Sie die Methode
projects.subscriptions.pull
. Im folgenden Beispiel wird der Abfrageparameter?maxMessages=10
verwendet, um Geben Sie die maximale Anzahl von Nachrichten an, die in der Anfrage zurückgegeben werden sollen. Passen Sie diesen Wert an Ihren Anwendungsfall an.Ersetzen Sie diese Werte in den folgenden Anfragedaten:
PROJECT_ID
ist die ID Ihres Google Cloud-ProjektsPUBSUB_SUBSCRIPTION_ID
: die ID des Abos, das an das im DICOM-Speicher konfigurierte Pub/Sub-Thema angehängt ist
Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:
curl
Führen Sie folgenden Befehl aus:
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
Führen Sie folgenden Befehl aus:
$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
Öffnen Sie das Methodenreferenzseite. Der API Explorer wird rechts auf der Seite geöffnet. Sie können mit diesem Tool interagieren, um Anfragen zu senden. Füllen Sie die Pflichtfelder aus und klicken Sie auf Ausführen.
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
gcloud
Führen Sie den Befehl
gcloud pubsub subscriptions pull
aus.Im Beispiel werden die folgenden Google Cloud CLI-Flags verwendet:
--limit=10
: Gibt maximal 10 Nachrichten zurück. Passen Sie diesen Wert an Ihren Anwendungsfall an.--format=json
: Rendert die Ausgabe im JSON-Format.--auto-ack
: Jede abgerufene Nachricht wird automatisch bestätigt.
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
PROJECT_ID
ist die ID Ihres Google Cloud-ProjektsPUBSUB_SUBSCRIPTION_ID
: die ID des Abos, das an das im DICOM-Speicher konfigurierte Pub/Sub-Thema angehängt ist
Führen Sie folgenden Befehl aus:
Linux, macOS oder 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
Sie sollten eine Antwort ähnlich der folgenden erhalten:
[ { "ackId": "RFAGFixdRkhRNxkIaFEOT14jPzUgKEUaAggUBXx9cEFLdVhUcGhRDRlyfWB9bQ5GAgpGWixfURsHaE5tdR", "ackStatus": "SUCCESS", "message": { "data": "cHJvamVjdHMvbXlwcm9qZWN0L2xvY2F0aW9ucy91cy1jZW50cmFsMS9kYXRhc2V0cy9teS1kYXRhc2V0L2RpY29tU3RvcmVzL215LWRpY29tLXN0b3JlL2RpY29tV2ViL3N0dWRpZXMvMS4zLjYuMS40LjEuMTExMjkuNS41LjExMTM5NjM5OTM2MTk2OTg5ODIwNTM2NDQwMDU0OTc5OTI1Mjg1NzYwNC9zZXJpZXMvMS4zLjYuMS40LjEuMTExMjkuNS41LjE5NTYyODIxMzY5NDMwMDQ5ODk0Njc2MDc2NzQ4MTI5MTI2MzUxMTcyNC9pbnN0YW5jZXMvMS4zLjYuMS40LjEuMTExMjkuNS41LjE1Mzc1MTAwOTgzNTEwNzYxNDY2NjgzNDU2MzI5NDY4NDMzOTc0NjQ4MA==", "messageId": "7586159156345265", "publishTime": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ" } } ]
Cloud Healthcare API und Pub/Sub-Nachrichtenspeicherrichtlinie
Um sicherzustellen, dass sich die Cloud Healthcare API-Daten und die zugehörigen Daten in Pub/Sub-Nachrichten in derselben Region befinden, müssen Sie eine Pub/Sub-Nachrichtenspeicherrichtlinie festlegen.
Sie müssen die Speicherrichtlinie für Nachrichten explizit in Pub/Sub festlegen
für den Datenspeicher konfiguriert, um sicherzustellen, dass die Daten im selben
Region Wenn sich Ihr Cloud Healthcare API-Dataset und Ihr FHIR-Speicher beispielsweise in us-central1
befinden, darf die Nachrichtenspeicherrichtlinie nur die Region us-central1
zulassen.
Informationen zum Konfigurieren einer Richtlinie für den Nachrichtenspeicher finden Sie unter Richtlinien für den Nachrichtenspeicher konfigurieren.
Fehlerbehebung bei verpassten Pub/Sub-Nachrichten
Wenn eine Benachrichtigung nicht in Pub/Sub veröffentlicht werden kann, wird ein Fehler in Cloud Logging in Logs erfasst. Weitere Informationen finden Sie unter Fehlerlogs in Cloud Logging ansehen.
Wenn die Fehlergenerierungsrate einen Grenzwert überschreitet, sind Fehler, die diesen Grenzwert überschreiten, Fehler. nicht an Cloud Logging gesendet.
Nächste Schritte
- Vorübergehende Spitzen mit der Ablaufsteuerung verarbeiten
- Umgang mit Nachrichtenfehlern
- Nachrichten wiedergeben und dauerhaft löschen
- Architekturübersicht über Pub/Sub