Nesta página, descrevemos como usar o Pub/Sub para receber notificações sobre eventos clínicos em um armazenamento DICOM. É possível receber notificações do Pub/Sub quando uma nova instância DICOM é armazenada em um armazenamento DICOM ou importado do Cloud Storage.
É possível usar as notificações do Pub/Sub para várias finalidades, como acionar o processamento downstream ou analisar dados novos. Por exemplo, modelo de machine learning pode receber notificações quando novos dados estiverem disponíveis para treinamento insights para melhorar o atendimento aos pacientes.
A figura a seguir mostra como as notificações do Pub/Sub são geradas e publicados.
Figura 1. Receber notificações do Pub/Sub sobre eventos clínicos em um armazenamento DICOM.
A Figura 1 mostra as seguintes etapas:
- Um autor da chamada faz uma solicitação para armazenar ou importar uma instância DICOM.
- O repositório DICOM recebe a solicitação e cria um objeto Pub/Sub e a envia ao tópico do Pub/Sub configurado no repositório DICOM.
- O Pub/Sub encaminha a mensagem para as assinaturas anexadas ao tópico.
- Os assinantes recebem a mensagem da assinatura. Cada assinatura pode ter um ou mais assinantes para aumentar o paralelismo.
Antes de começar
Adicionar permissões de editor do Pub/Sub
Para publicar mensagens da API Cloud Healthcare no Pub/Sub, você
precisa adicionar o papel pubsub.publisher
à conta de serviço do Agente de serviço do Cloud Healthcare do seu projeto.
Para mais informações, consulte Permissões do Pub/Sub para o armazenamento de DICOM, FHIR e HL7v2.
Formato e conteúdo das notificações
Uma notificação do Pub/Sub contém um Message
.
que inclui
informações sobre o evento clínico. As notificações DICOM do Pub/Sub não
incluir um campo attributes
. O objeto Message
parece
semelhante a:
{ "message": { "data": "BASE_64_ENCODED_DATA", "messageId": "MESSAGE_ID", "publishTime": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ" } }
O valor no campo data
é o seguinte identificador como uma string codificada em base 64: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_UID/series/SERIES_UID/instances/INSTANCE_UID
Para mais informações sobre os campos incluídos em cada mensagem do Pub/Sub,
consulte ReceivedMessage
e PubsubMessage
.
Configurar e visualizar notificações
Nesta seção, descrevemos como ativar as notificações do Pub/Sub um repositório DICOM, armazena ou importa uma instância DICOM para publicar uma notificação e visualizar a notificação.
Configurar o armazenamento DICOM
Os exemplos a seguir mostram como ativar as notificações do Pub/Sub em um armazenamento DICOM quando uma nova instância DICOM é armazenada ou importada do Cloud Storage.
REST
Use o método projects.locations.datasets.dicomStores.patch
.
O
NotificationConfig.sendForBulkImport
o valor é true
. Portanto, as notificações são enviadas na importação de dados do Cloud Storage.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do seu projeto do Google Cloud;LOCATION
: o local do conjunto de dados;DATASET_ID
: o conjunto de dados pai do armazenamento DICOMDICOM_STORE_ID
: o ID do repositório DICOMPUBSUB_TOPIC
: um tópico do Pub/Sub em que as mensagens são publicadas quando um evento ocorre em um repositório de dados.
Corpo JSON da solicitação:
{ "notificationConfig": { "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC", "sendForBulkImport": "true" } }
Para enviar a solicitação, escolha uma destas opções:
curl
Salve o corpo da solicitação em um arquivo chamado request.json
.
Execute o comando a seguir no terminal para criar ou substituir
esse arquivo no diretório atual:
cat > request.json << 'EOF' { "notificationConfig": { "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC", "sendForBulkImport": "true" } } EOF
Depois execute o comando a seguir para enviar a solicitação 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
Salve o corpo da solicitação em um arquivo chamado request.json
.
Execute o comando a seguir no terminal para criar ou substituir
esse arquivo no diretório atual:
@' { "notificationConfig": { "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC", "sendForBulkImport": "true" } } '@ | Out-File -FilePath request.json -Encoding utf8
Depois execute o comando a seguir para enviar a solicitação 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
APIs Explorer
Copie o corpo da solicitação e abra o página de referência do método. O painel "APIs Explorer" é aberto no lado direito da página. Interaja com essa ferramenta para enviar solicitações. Cole o corpo da solicitação nessa ferramenta, preencha todos os outros campos obrigatórios e clique em Executar.
Você vai receber uma resposta semelhante a esta.
Se você configurou campos no recurso DicomStore
, eles também vão aparecer na resposta.
gcloud
Execute o comando gcloud healthcare dicom-stores update
.
Antes de usar os dados do comando abaixo, faça estas substituições:
PROJECT_ID
: o ID do seu projeto do Google Cloud;LOCATION
: o local do conjunto de dados;DATASET_ID
: o conjunto de dados pai do armazenamento DICOMDICOM_STORE_ID
: o ID do repositório DICOMPUBSUB_TOPIC
: um tópico do Pub/Sub em que as mensagens são publicadas quando um evento ocorre em um repositório de dados.
Execute o seguinte comando:
Linux, macOS ou 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
Você receberá uma resposta semelhante a esta:
Resposta
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
Armazenar ou importar uma instância DICOM e visualizar a notificação do Pub/Sub
Para armazenar ou importar uma instância DICOM e extrair a mensagem do Pub/Sub gerada, siga estas etapas:
Store ou importar uma instância DICOM. A solicitação faz com que a API Cloud Healthcare publique um para o tópico configurado do Pub/Sub.
Receba a mensagem. Se você importar vários instâncias DICOM em uma única solicitação, uma mensagem é gerada para cada instância DICOM.
Visualizar as permissões do Identity and Access Management necessárias para extrair Mensagens do Pub/Sub, consulte Controle de acesso do Pub/Sub.
REST
Use o método
projects.subscriptions.pull
. O exemplo a seguir usa o parâmetro de consulta?maxMessages=10
para especificar o número máximo de mensagens a serem retornadas na solicitação. Ajuste esse valor de acordo com seu caso de uso.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do seu projeto do Google Cloud;PUBSUB_SUBSCRIPTION_ID
: o ID da assinatura anexada ao tópico do Pub/Sub configurado no armazenamento DICOM
Para enviar a solicitação, escolha uma destas opções:
curl
execute o seguinte 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
execute o seguinte 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 ContentAPIs Explorer
Abra o página de referência do método. O painel "APIs Explorer" é aberto no lado direito da página. Interaja com essa ferramenta para enviar solicitações. Preencha todos os campos obrigatórios e clique em Executar.
Você receberá uma resposta JSON semelhante a esta:
gcloud
Execute o comando
gcloud pubsub subscriptions pull
.O exemplo usa as seguintes sinalizações da Google Cloud CLI:
--limit=10
: retorna no máximo 10 mensagens. Ajuste esse valor de acordo com seu caso de uso.--format=json
: renderiza a saída como JSON.--auto-ack
: confirma automaticamente todas as mensagens extraídas.
Antes de usar os dados do comando abaixo, faça estas substituições:
PROJECT_ID
: o ID do seu projeto do Google Cloud;PUBSUB_SUBSCRIPTION_ID
: o ID da assinatura anexada ao tópico do Pub/Sub configurado no armazenamento DICOM
Execute o seguinte comando:
Linux, macOS ou 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
Você receberá uma resposta semelhante a esta:
[ { "ackId": "RFAGFixdRkhRNxkIaFEOT14jPzUgKEUaAggUBXx9cEFLdVhUcGhRDRlyfWB9bQ5GAgpGWixfURsHaE5tdR", "ackStatus": "SUCCESS", "message": { "data": "cHJvamVjdHMvbXlwcm9qZWN0L2xvY2F0aW9ucy91cy1jZW50cmFsMS9kYXRhc2V0cy9teS1kYXRhc2V0L2RpY29tU3RvcmVzL215LWRpY29tLXN0b3JlL2RpY29tV2ViL3N0dWRpZXMvMS4zLjYuMS40LjEuMTExMjkuNS41LjExMTM5NjM5OTM2MTk2OTg5ODIwNTM2NDQwMDU0OTc5OTI1Mjg1NzYwNC9zZXJpZXMvMS4zLjYuMS40LjEuMTExMjkuNS41LjE5NTYyODIxMzY5NDMwMDQ5ODk0Njc2MDc2NzQ4MTI5MTI2MzUxMTcyNC9pbnN0YW5jZXMvMS4zLjYuMS40LjEuMTExMjkuNS41LjE1Mzc1MTAwOTgzNTEwNzYxNDY2NjgzNDU2MzI5NDY4NDMzOTc0NjQ4MA==", "messageId": "7586159156345265", "publishTime": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ" } } ]
API Cloud Healthcare e política de armazenamento de mensagens do Pub/Sub
Para garantir que os dados da API Cloud Healthcare e os dados associados no Pub/Sub mensagens residam na mesma região, é preciso configurar uma política de armazenamento de mensagens.
Defina explicitamente a política de armazenamento de mensagens no Pub/Sub
configurado no repositório de dados para garantir que os dados permaneçam no mesmo
região. Por exemplo, se o conjunto de dados da API Cloud Healthcare e o armazenamento FHIR estiverem no
us-central1
, a política de armazenamento de mensagens precisa permitir apenas a região us-central1
.
Para configurar uma política de armazenamento de mensagens, consulte Como configurar políticas de armazenamento de mensagens.
Resolver problemas de mensagens perdidas do Pub/Sub
Se não for possível publicar uma notificação no Pub/Sub, será registrado um erro no Cloud Logging. Para mais informações, consulte Como visualizar registros de erros no Cloud Logging.
Se a taxa de geração de erros exceder um limite, os erros que ultrapassarem o limite não são enviados ao Cloud Logging.
A seguir
- Lidar com picos temporários com controle de fluxo
- Lidar com falhas de mensagens
- Repetir e limpar mensagens
- Visão geral da arquitetura do Pub/Sub