configura le notifiche DICOM Pub/Sub

In questa pagina viene descritto come utilizzare Pub/Sub per ricevere notifiche sugli eventi clinici in un archivio DICOM. Puoi ricevere notifiche Pub/Sub quando viene archiviata una nuova istanza DICOM in un archivio DICOM o importati da Cloud Storage.

Puoi utilizzare le notifiche Pub/Sub per più scopi, ad esempio che attivano l'elaborazione downstream o l'analisi di nuovi dati. Ad esempio, un di machine learning può ricevere notifiche quando sono disponibili nuovi dati per l'addestramento per migliorare l'assistenza ai pazienti.

La figura seguente mostra come vengono generate le notifiche Pub/Sub e pubblicato.

Notifiche DICOM Pub/Sub.

Figura 1. Ricezione di notifiche Pub/Sub sugli eventi clinici in un archivio DICOM.

La Figura 1 mostra i seguenti passaggi:

  1. Un chiamante invia una richiesta per archiviare o importare un'istanza DICOM.
  2. L'archivio DICOM riceve la richiesta e crea un Pub/Sub e lo invia all'argomento Pub/Sub configurato nell'archivio DICOM.
  3. Pub/Sub inoltra il messaggio alle sottoscrizioni allegate all'argomento.
  4. I sottoscrittori ricevono il messaggio dalla propria sottoscrizione. Ogni abbonamento possono avere uno o più sottoscrittori per un maggiore parallelismo.

Prima di iniziare

  1. Crea un argomento.
  2. Crea una sottoscrizione pull.

Aggiungi le autorizzazioni del publisher Pub/Sub

Per pubblicare messaggi dall'API Cloud Healthcare in Pub/Sub, devi aggiungere il ruolo pubsub.publisher a l'account di servizio dell'agente di servizio Cloud Healthcare del tuo progetto. Per ulteriori informazioni, consulta le autorizzazioni Pub/Sub per archivi DICOM, FHIR e HL7v2.

Formato e contenuto delle notifiche

Una notifica Pub/Sub contiene un oggetto Message che include informazioni sull'evento clinico. Le notifiche DICOM Pub/Sub non includi un campo attributes. L'oggetto Message cerca simile al seguente:

{
  "message": {
    "data": "BASE_64_ENCODED_DATA",
    "messageId": "MESSAGE_ID",
    "publishTime": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ"
  }
}

Il valore nel campo data è il seguente identificatore come stringa con codifica in base 64: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_UID/series/SERIES_UID/instances/INSTANCE_UID

Per ulteriori informazioni sui campi inclusi in ogni messaggio Pub/Sub, vedi ReceivedMessage e PubsubMessage.

Configura e visualizza le notifiche

Questa sezione descrive come abilitare le notifiche Pub/Sub su un datastore DICOM, archiviare o importare un'istanza DICOM per pubblicare una notifica, e visualizzare la notifica.

configura l'archivio DICOM

Gli esempi riportati di seguito mostrano come abilitare le notifiche Pub/Sub in un archivio DICOM quando una nuova istanza DICOM viene archiviata o importata da Cloud Storage.

REST

Utilizza il metodo projects.locations.datasets.dicomStores.patch.

La NotificationConfig.sendForBulkImport è true, quindi le notifiche vengono inviate quando importi dati da Cloud Storage.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud
  • LOCATION: la posizione del set di dati
  • DATASET_ID: set di dati padre dell'archivio DICOM
  • DICOM_STORE_ID: l'ID datastore DICOM
  • PUBSUB_TOPIC: un argomento Pub/Sub in cui vengono pubblicati i messaggi quando si verifica un evento in un datastore

Corpo JSON della richiesta:

{
  "notificationConfig": {
    "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC",
    "sendForBulkImport": "true"
  }
}

Per inviare la richiesta, scegli una delle seguenti opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory corrente:

cat > request.json << 'EOF'
{
  "notificationConfig": {
    "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC",
    "sendForBulkImport": "true"
  }
}
EOF

Quindi, esegui questo comando per inviare la richiesta REST:

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

Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory corrente:

@'
{
  "notificationConfig": {
    "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC",
    "sendForBulkImport": "true"
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Quindi, esegui questo comando per inviare la richiesta REST:

$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

Explorer API

Copia il corpo della richiesta e apri pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Incolla il corpo della richiesta in questo strumento, compila tutti gli altri campi obbligatori e fai clic su Esegui.

Dovresti ricevere una risposta simile alla seguente.

Se nella risorsa DicomStore hai configurato dei campi, questi vengono visualizzati anche nella risposta.

gcloud

Esegui gcloud healthcare dicom-stores update. .

Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud
  • LOCATION: la posizione del set di dati
  • DATASET_ID: set di dati padre dell'archivio DICOM
  • DICOM_STORE_ID: l'ID datastore DICOM
  • PUBSUB_TOPIC: un argomento Pub/Sub in cui vengono pubblicati i messaggi quando si verifica un evento in un datastore

Esegui la persone che seguo :

Linux, macOS o 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

Dovresti ricevere una risposta simile alla seguente:

Risposta

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

Archivia o importa un'istanza DICOM e visualizza la notifica Pub/Sub

Per archiviare o importare un'istanza DICOM ed eseguire il pull del messaggio Pub/Sub generato, completa i seguenti passaggi:

  1. Negozio o importazione un'istanza DICOM. La richiesta fa sì che l'API Cloud Healthcare pubblichi un nell'argomento Pub/Sub configurato.

  2. Esegui il pull del messaggio. Se importi più elementi Istanze DICOM in una singola richiesta; viene generato un messaggio per ogni istanza DICOM.

    Per visualizzare le autorizzazioni di Identity and Access Management necessarie per eseguire il pull Per i messaggi Pub/Sub, consulta Controllo dell'accesso per Pub/Sub.

    REST

    Utilizza la projects.subscriptions.pull . Nell'esempio seguente viene utilizzato il parametro di query ?maxMessages=10 per specificare il numero massimo di messaggi da restituire nella richiesta. Modifica questo valore in base al tuo caso d'uso.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • PUBSUB_SUBSCRIPTION_ID: l'ID della sottoscrizione collegata all'argomento Pub/Sub configurato nell'archivio DICOM

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

    $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 Content

    Explorer API

    Apri l'app pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    Dovresti ricevere una risposta JSON simile alla seguente:

    gcloud

    Esegui l' gcloud pubsub subscriptions pull .

    L'esempio utilizza i seguenti flag di Google Cloud CLI:

    • --limit=10: restituisce un massimo di 10 messaggi. Modifica questo valore in base al tuo caso d'uso.
    • --format=json: esegue il rendering dell'output come JSON.
    • --auto-ack: conferma automaticamente ogni messaggio di cui è stato eseguito il pull.

    Prima di utilizzare uno qualsiasi dei dati di comando riportati di seguito, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • PUBSUB_SUBSCRIPTION_ID: l'ID della sottoscrizione collegata all'argomento Pub/Sub configurato nell'archivio DICOM

    Esegui la persone che seguo :

    Linux, macOS o 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
    

    Dovresti ricevere una risposta simile alla seguente:

    [
      {
        "ackId": "RFAGFixdRkhRNxkIaFEOT14jPzUgKEUaAggUBXx9cEFLdVhUcGhRDRlyfWB9bQ5GAgpGWixfURsHaE5tdR",
        "ackStatus": "SUCCESS",
        "message": {
          "data": "cHJvamVjdHMvbXlwcm9qZWN0L2xvY2F0aW9ucy91cy1jZW50cmFsMS9kYXRhc2V0cy9teS1kYXRhc2V0L2RpY29tU3RvcmVzL215LWRpY29tLXN0b3JlL2RpY29tV2ViL3N0dWRpZXMvMS4zLjYuMS40LjEuMTExMjkuNS41LjExMTM5NjM5OTM2MTk2OTg5ODIwNTM2NDQwMDU0OTc5OTI1Mjg1NzYwNC9zZXJpZXMvMS4zLjYuMS40LjEuMTExMjkuNS41LjE5NTYyODIxMzY5NDMwMDQ5ODk0Njc2MDc2NzQ4MTI5MTI2MzUxMTcyNC9pbnN0YW5jZXMvMS4zLjYuMS40LjEuMTExMjkuNS41LjE1Mzc1MTAwOTgzNTEwNzYxNDY2NjgzNDU2MzI5NDY4NDMzOTc0NjQ4MA==",
          "messageId": "7586159156345265",
          "publishTime": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ"
        }
      }
    ]
    

Criterio di archiviazione dei messaggi dell'API Cloud Healthcare e di Pub/Sub

assicurare che i dati dell'API Cloud Healthcare e i dati associati in Pub/Sub che i messaggi risiedono nella stessa regione, devi impostare un criterio di archiviazione dei messaggi.

Devi impostare esplicitamente il criterio di archiviazione dei messaggi in Pub/Sub configurato nel datastore per garantire che i dati rimangano negli stessi regione. Ad esempio, se il set di dati dell'API Cloud Healthcare e il datastore FHIR sono in us-central1, il criterio di archiviazione dei messaggi deve consentire solo la regione us-central1.

Per configurare un criterio di archiviazione dei messaggi, vedi Configurazione dei criteri dell'archivio messaggi.

Risolvere i problemi relativi ai messaggi Pub/Sub persi

Se una notifica non può essere pubblicata in Pub/Sub, viene restituito un errore e log in Cloud Logging. Per ulteriori informazioni, vedi Visualizzazione dei log degli errori in Cloud Logging.

Se la percentuale di generazione di errori supera un limite, gli errori che superano il limite non vengono inviate a Cloud Logging.

Passaggi successivi