Publicar eventos diretamente

É possível publicar um evento do CloudEvents diretamente em um barramento do Eventarc Advanced em um formato compatível usando a Google Cloud CLI ou enviando uma solicitação para a API REST de publicação do Eventarc. Você também pode usar as bibliotecas de cliente do Eventarc para acessar as APIs do Eventarc em uma linguagem compatível.

Antes de começar

Se ainda não tiver feito isso, ative a API Eventarc e a API Eventarc Publishing.

gcloud services enable eventarc.googleapis.com eventarcpublishing.googleapis.com

Publicar diretamente

A mensagem de evento publicada diretamente precisa estar em conformidade com a especificação do CloudEvents.

gcloud

  1. Abra um terminal.

  2. É possível publicar eventos em um barramento usando o comando gcloud beta eventarc message-buses publish. Exemplo:

    gcloud beta eventarc message-buses publish BUS_NAME \
        --avro-message=AVRO_MESSAGE
    Ou:
    gcloud beta eventarc message-buses publish BUS_NAME \
        --json-message=JSON_MESSAGE
    Ou:
    gcloud beta eventarc message-buses publish BUS_NAME \
        --event-data=DATA_PAYLOAD \
        --event-id=EVENT_ID \
        --event-source=EVENT_SOURCE \
        --event-type=EVENT_TYPE \
        --event-attributes=EVENT_ATTRIBUTE

    Substitua:

    • BUS_NAME: o ID ou identificador totalmente qualificado do barramento em que o evento será publicado.

    Use apenas uma das seguintes opções:

    • AVRO_MESSAGE: a mensagem de evento em um formato Avro de acordo com esta especificação.
    • JSON_MESSAGE: a mensagem de evento em formato JSON de acordo com esta especificação.
    • DATA_PAYLOAD: os dados de um evento publicado.

    Se você estiver usando a flag --event-data, também precisará usar o seguinte:

    • EVENT_ID: o identificador do evento. Os produtores de eventos precisam garantir que source + id seja exclusivo para cada evento distinto.
    • EVENT_SOURCE: a origem do evento de um evento publicado.
    • EVENT_TYPE: o tipo de evento relacionado à ocorrência de origem.

    Se você estiver usando a flag --event-data, poderá usar as seguintes opções:

    • EVENT_ATTRIBUTE: os atributos de um evento publicado. Você pode repetir a flag --event-attributes para adicionar mais atributos.

      Os eventos podem incluir qualquer número de atributos personalizados adicionais do CloudEvents com nomes distintos, também conhecidos como atributos de extensão.

Exemplos:

gcloud beta eventarc message-buses publish my-bus \
    --event-data='{"key": "hello-world-data"}' \
    --event-id=hello-world-id-1234 \
    --event-source=hello-world-source \
    --event-type=hello-world-type \
    --event-attributes="datacontenttype=application/json"

gcloud beta eventarc message-buses publish my-bus --json-message='{
    "specversion" : "1.0",
    "type" :"com.example.someevent",
    "source" : "google.cloud.storage.object.v1.finalized",
    "id" : "A234-1234-1234",
    "time" : "2024-04-05T17:31:00Z",
    "bucket" : "bucketName",
    "datacontenttype" : "application/json",
    "data":{"key": "value"}
}'

API REST

Para publicar um evento em um barramento, use o método projects.locations.messageBuses.publish.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • O nome completo do recurso do ônibus no formato projects/PROJECT_ID/locations/LOCATION/messageBuses/BUS_NAME

    Substitua:

    • PROJECT_ID: o ID do projeto Google Cloud do projeto de ônibus.
    • LOCATION: a região em que o barramento é implantado, por exemplo, us-central1.
    • BUS_NAME: o nome do barramento em que o evento será publicado.
  • SPEC_VERSION: a versão da especificação CloudEvents usada pelo evento. Por exemplo, 1.0.
  • EVENT_TYPE: o tipo de evento relacionado à ocorrência de origem.
  • EVENT_SOURCE: a origem do evento de um evento publicado.
  • EVENT_ID: o identificador do evento. Os produtores precisam garantir que source + id seja exclusivo para cada evento distinto.
  • CONTENT_TYPE (opcional): o tipo de conteúdo do valor data. Se um evento no formato JSON não tiver um atributo datacontenttype, presume-se que os dados sejam um valor JSON em conformidade com o tipo de mídia application/json.
  • DATA_PAYLOAD (opcional): o payload do evento codificado no formato de mídia especificado por datacontenttype e seguindo dataschema quando esses atributos estão presentes.

Corpo JSON da solicitação:

{
"jsonMessage":
  "{\"specversion\":\"SPEC_VERSION\",
  \"type\":\"EVENT_TYPE\",
  \"source\":\"EVENT_SOURCE\",
  \"id\":\"EVENT_ID\",
  \"datacontenttype\":\"CONTENT_TYPE\",
  \"data\":\"DATA_PAYLOAD\"}"
}

Para enviar a solicitação, expanda uma destas opções:

Se a solicitação for bem-sucedida, o servidor vai retornar um código de status HTTP 200 OK e o corpo da resposta vazio no formato JSON:

200 OK

{}

A seguir