Neste documento, mostramos como associar esquemas para tópicos do Pub/Sub.
Antes de começar
- Entenda como os esquemas do Pub/Sub funcionam.
- Crie um esquema.
Papéis e permissões necessárias
Para ter as permissões necessárias para associar e gerenciar esquemas,
peça ao administrador para conceder a você o
papel do IAM de
Editor do Pub/Sub (roles/pubsub.editor
) no seu projeto.
Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.
Esse papel predefinido contém as permissões necessárias para associar e gerenciar esquemas. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As seguintes permissões são necessárias para associar e gerenciar esquemas:
-
Criar esquema:
pubsub.schemas.create
-
Anexar esquema ao tópico:
pubsub.schemas.attach
-
Confirmar uma revisão de esquema:
pubsub.schemas.commit
-
Excluir um esquema ou uma revisão de esquema:
pubsub.schemas.delete
-
Receber uma revisão de esquema ou esquema:
pubsub.schemas.get
-
Listar esquemas:
pubsub.schemas.list
-
Listar revisões de esquema:
pubsub.schemas.listRevisions
-
Reverter um esquema:
pubsub.schemas.rollback
-
Validar uma mensagem:
pubsub.schemas.validate
-
Consiga a política do IAM para um esquema:
pubsub.schemas.getIamPolicy
-
Configure a política do IAM para um esquema:
pubsub.schemas.setIamPolicy
Talvez você também consiga receber essas permissões com papéis personalizados ou outros papéis predefinidos.
É possível conceder papéis e permissões a principais como usuários, grupos, domínios ou contas de serviço. É possível criar um esquema em um projeto e anexá-lo a um tópico localizado em outro projeto. Verifique se você tem as permissões necessárias para cada projeto.
Diretrizes para associar um esquema a um tópico
Você pode associar um esquema a um tópico ao criar ou editar um tópico. Estas são as diretrizes para associar um esquema a um tópico:
É possível associar um esquema a um ou mais tópicos.
Depois que um esquema é associado a um tópico, todas as mensagens que o tópico recebe dos editores precisam seguir esse esquema.
Ao associar um esquema a um tópico, você também precisa especificar a codificação das mensagens a serem publicadas como
BINARY
ouJSON
. Se você estiver usando JSON com um esquema Avro, preste muita atenção às regras de codificação para uniões.Se um esquema associado a um tópico tiver revisões, as mensagens precisarão corresponder à codificação e validar em relação a uma revisão dentro do intervalo disponível. Se eles não forem validados, a mensagem não será publicada.
As revisões são testadas em ordem cronológica inversa, com base no horário de criação. Para criar uma revisão de esquema, consulte Confirmar uma revisão de esquema.
Lógica de validação para um esquema de mensagem
Ao associar um esquema a um tópico e ele tiver revisões, será possível especificar um subconjunto de revisões a ser usada. Se você não especificar um intervalo, todo o intervalo será usado para validação.
Se você não especificar uma revisão como Primeira revisão permitida, a revisão atual mais antiga do esquema será usada para validação. Se você não especificar uma revisão como Última revisão permitida, a revisão atual mais recente para o esquema será usada.
Vamos usar o exemplo do esquema S
anexado ao tópico T
.
O esquema S
tem os IDs de revisão A
, B
, C
e D
criados em ordem, em que A
é a primeira ou a mais antiga. Nenhum dos esquemas é idêntico
aos outros nem às reversões de um esquema atual.
Se você definir apenas o campo Primeira revisão permitida como
B
, as mensagens em conformidade apenas com o esquemaA
serão rejeitadas, enquanto as mensagens em conformidade com os esquemasB
,C
eD
serão aceitas.Se você definir apenas o campo Última revisão permitida como
C
, as mensagens que estiverem em conformidade com os esquemasA
,B
eC
serão aceitas, e as mensagens em conformidade apenas com o esquemaD
serão rejeitadas.Se você definir os campos Primeira revisão permitida como
B
e Última revisão permitida comoC
, as mensagens que estiverem em conformidade com os esquemasB
eC
serão aceitas.Também é possível definir a primeira e a última revisão com o mesmo ID. Nesse caso, apenas as mensagens que estiverem em conformidade com essa revisão serão aceitas.
Criar e associar um esquema ao criar um tópico
É possível criar um tópico com um esquema usando o console do Google Cloud, a CLI gcloud, a API Pub/Sub ou as bibliotecas de cliente do Cloud.
Console
No console do Google Cloud, acesse a página de tópicos do Pub/Sub.
Selecione Criar tópico.
No campo Código do tópico, insira um código para o tópico.
Para nomear um tópico, consulte as diretrizes.
Marque a caixa Usar um esquema.
Mantenha as configurações padrão para os campos restantes.
É possível criar um esquema ou usar um existente.
Se você estiver criando um esquema, siga estas etapas: `
- Em Selecionar um esquema do Pub/Sub, escolha Criar um novo esquema.
A página Criar esquema é exibida em uma guia secundária.
Siga as etapas em Criar um esquema.
Volte para a guia Criar tópico e clique em Atualizar.
Procure seu esquema no campo Selecionar um esquema do Pub/Sub.
Selecione a codificação de mensagens como JSON ou Binário.
O esquema que você acabou de criar tem um ID de revisão. É possível criar revisões de esquema adicionais, conforme discutido em Confirmar uma revisão de esquema.
Se você estiver associando um esquema já criado, siga estas etapas:
Em Selecionar um esquema do Pub/Sub, escolha um esquema atual.
Selecione a codificação de mensagens como JSON ou Binário.
Opcional: se o esquema selecionado tiver revisões, em Intervalo de revisões, use os menus suspensos de Primeira revisão permitida e Última revisão permitida.
É possível especificar os dois campos, especificar apenas um ou manter as configurações padrão com base nos seus requisitos.
Mantenha as configurações padrão para os campos restantes.
Clique em Criar para salvar o tópico e atribuí-lo ao esquema selecionado.
gcloud
Para criar um tópico atribuído com um esquema criado anteriormente, execute o comando gcloud pubsub topics create
:
gcloud pubsub topics create TOPIC_ID \ --message-encoding=ENCODING_TYPE \ --schema=SCHEMA_ID \ --first-revision-id=FIRST_REVISION_ID \ --last-revision-id=LAST_REVISION_ID \
Em que:
- TOPIC_ID é o ID do tópico que você está criando.
- ENCODING_TYPE é a codificação de mensagens validadas em relação ao esquema. Esse valor precisa ser definido como
JSON
ouBINARY
. - SCHEMA_ID é o ID de um esquema existente.
- FIRST_REVISION_ID é o ID da revisão mais antiga para validação.
- LAST_REVISION_ID é o ID da revisão mais recente para validação.
Tanto --first-revision-id
quanto --last-revision-id
são opcionais.
Também é possível atribuir um esquema de outro projeto do Google Cloud:
gcloud pubsub topics create TOPIC_ID \ --message-encoding=ENCODING_TYPE \ --schema=SCHEMA_ID \ --schema-project=SCHEMA_PROJECT \ --project=TOPIC_PROJECT
Em que:
- SCHEMA_PROJECT é o ID do projeto do Google Cloud para o esquema.
- TOPIC_PROJECT é o ID do projeto do Google Cloud para o tópico.
REST
Para criar um tópico, use o método
projects.topics.create
:
Solicitação:
A solicitação precisa ser autenticada com um token de acesso no cabeçalho Authorization
. Para conseguir um token de acesso para o Application Default Credentials: gcloud auth application-default print-access-token
.
PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID Authorization: Bearer ACCESS_TOKEN
Corpo da solicitação:
{ "schemaSettings": { "schema": "SCHEMA_NAME", "encoding": "ENCODING_TYPE" "firstRevisionId": "FIRST_REVISION_ID" "lastRevisionId": "LAST_REVISION_ID" } }
Em que:
- PROJECT_ID é o ID do projeto;
- TOPIC_ID é o ID do tópico.
- SCHEMA_NAME é o nome do esquema em que as mensagens publicadas precisam ser validadas. O formato é:
projects/PROJECT_ID/schemas/SCHEMA_ID
. - ENCODING_TYPE é a codificação de mensagens validadas em relação ao esquema. Precisa ser definido como
JSON
ouBINARY
. - FIRST_REVISION_ID é o ID da revisão mais antiga para validação.
- LAST_REVISION_ID é o ID da revisão mais recente para validação.
Tanto firstRevisionId
quanto lastRevisionId
são opcionais.
Resposta:
{ "name": "projects/PROJECT_ID/topics/TOPIC_ID", "schemaSettings": { "schema": "SCHEMA_NAME", "encoding": "ENCODING_TYPE" "firstRevisionId": "FIRST_REVISION_ID" "lastRevisionId": "LAST_REVISION_ID" } }
Tanto firstRevisionId
quanto lastRevisionId
serão omitidos se não forem fornecidos na solicitação.
C++
Antes de tentar esse exemplo, siga as instruções de configuração do C++ em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub C++.
C#
Antes de tentar esse exemplo, siga as instruções de configuração do C# em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub C#.
Go
Antes de tentar esse exemplo, siga as instruções de configuração do Go em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Go.
Java
Antes de tentar essa amostra, siga as instruções de configuração do Java em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Java.
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Node.js.
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Node.js.
PHP
Antes de tentar esse exemplo, siga as instruções de configuração do PHP em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub PHP.
Python
Antes de tentar esse exemplo, siga as instruções de configuração do Python em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Python.
Ruby
Antes de tentar esse exemplo, siga as instruções de configuração do Ruby em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Ruby.
Editar um esquema associado a um tópico
É possível editar um tópico para anexar, remover ou atualizar o intervalo de revisão usado para validar mensagens. Em geral, se você tiver alterações planejadas para o esquema em uso, confirme uma nova revisão e atualize o intervalo de revisões usado para o tópico.
É possível editar um esquema associado a um tópico usando o console do Google Cloud, a CLI gcloud, a API Pub/Sub ou as bibliotecas de cliente do Cloud.
Console
No console do Google Cloud, acesse a página de tópicos do Pub/Sub.
Clique no ID do tópico.
Na página de detalhes do tópico, clique em Editar.
É possível fazer as alterações a seguir no esquema.
Pode levar alguns minutos para que as mudanças entrem em vigor.
Se quiser remover o esquema do tópico, na página Editar tópico, desmarque a caixa de seleção Usar um esquema.
Se você quiser alterar o esquema, na seção Esquema, selecione o nome dele.
Atualize os outros campos conforme necessário.
- Caso queira atualizar o intervalo de revisão, em Intervalo de revisão, use os menus suspensos de Primeira revisão permitida e Última revisão permitida.
É possível especificar os dois campos, especificar apenas um ou manter as configurações padrão com base nos seus requisitos.
Clique em Atualizar para salvar as mudanças.
gcloud
gcloud pubsub topics update TOPIC_ID \ --message-encoding=ENCODING_TYPE \ --schema=SCHEMA_NAME \ --first-revision-id=FIRST_REVISION_ID \ --last-revision-id=LAST_REVISION_ID \
Em que:
- TOPIC_ID é o ID do tópico que você está criando.
- ENCODING_TYPE é a codificação de mensagens validadas em relação ao esquema. Esse valor precisa ser definido como
JSON
ouBINARY
. - SCHEMA_NAME é o nome de um esquema existente.
- FIRST_REVISION_ID é o ID da revisão mais antiga para validação.
- LAST_REVISION_ID é o ID da revisão mais recente para validação.
Tanto --first-revision-id
quanto --last-revision-id
são opcionais.
REST
Para atualizar um tópico, use o método
projects.topics.patch
:
Solicitação:
A solicitação precisa ser autenticada com um token de acesso no cabeçalho Authorization
. Para conseguir um token de acesso para o Application Default Credentials: gcloud auth application-default print-access-token
.
PATCH https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID Authorization: Bearer ACCESS_TOKEN
Corpo da solicitação:
{ "schemaSettings": { "schema": "SCHEMA_NAME", "encoding": "ENCODING_TYPE" "firstRevisionId": "FIRST_REVISION_ID" "lastRevisionId": "LAST_REVISION_ID" "update_mask": } }
Em que:
- PROJECT_ID é o ID do projeto;
- TOPIC_ID é o ID do tópico.
- SCHEMA_NAME é o nome do esquema em que as mensagens publicadas precisam ser validadas. O formato é:
projects/PROJECT_ID/schemas/SCHEMA_ID
. - ENCODING_TYPE é a codificação de mensagens validadas em relação ao esquema. Precisa ser definido como
JSON
ouBINARY
. - FIRST_REVISION_ID é o ID da revisão mais antiga para validação.
- LAST_REVISION_ID é o ID da revisão mais recente para validação.
Tanto firstRevisionId
quanto lastRevisionId
são opcionais.
Resposta:
{ "name": "projects/PROJECT_ID/topics/TOPIC_ID", "schemaSettings": { "schema": "SCHEMA_NAME", "encoding": "ENCODING_TYPE" "firstRevisionId": "FIRST_REVISION_ID" "lastRevisionId": "LAST_REVISION_ID" } }
Os valores firstRevisionId
e lastRevisionId
não são definidos após a
atualização.
C++
Antes de tentar esse exemplo, siga as instruções de configuração do C++ em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub C++.
Go
Antes de tentar esse exemplo, siga as instruções de configuração do Go em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Go.
Java
Antes de tentar essa amostra, siga as instruções de configuração do Java em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Java.
Python
Antes de tentar esse exemplo, siga as instruções de configuração do Python em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Python.
0A seguir
- Confirmar uma revisão de esquema
- Publicar mensagens em um tópico com um esquema
- Validar uma definição de esquema
- Validar uma mensagem para um esquema