Publicar eventos diretamente

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

A mensagem precisa estar em conformidade com a especificação 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 do evento em um formato Avro de acordo com esta especificação.
    • JSON_MESSAGE: a mensagem do evento em um formato JSON de acordo com esta especificação.
    • DATA_PAYLOAD: os dados de um evento publicado.

    Se você usar 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 sejam exclusivos para cada evento distinto.
    • EVENT_SOURCE: a origem do evento publicado.
    • EVENT_TYPE: o tipo de evento relacionado à ocorrência de origem.

    Se você usar a flag --event-data, poderá usar o seguinte:

    • 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 do CloudEvents com nomes distintos (também conhecidos como atributos de extensão).

Exemplos:

gcloud beta eventarc message-buses publish my-bus \
    --event-id=1234 \
    --event-type=event-provider.event.v1.eventType \
    --event-source="//event-provider/event/source" \
    --event-data='{"key": "value"}' \
    --event-attributes=attribute1=value

gcloud beta eventarc message-buses publish my-bus --json-message @- << EOF
{
    "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"}
}
EOF

API REST

Para publicar um evento em um bus, 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 barramento no formato projects/PROJECT_ID/locations/LOCATION/messageBuses/BUS_NAME

    Substitua:

    • PROJECT_ID: o ID do projeto do Google Cloud para o projeto de ônibus.
    • LOCATION: a região em que o barramento é implantado, por exemplo, us-central1.
    • BUS_NAME: o nome do bus em que o evento será publicado.
  • SPEC_VERSION: a versão da especificação do 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 publicado.
  • EVENT_ID: o identificador do evento. Os produtores precisam garantir que source + id sejam exclusivos para cada evento.
  • CONTENT_TYPE (opcional): o tipo de conteúdo do valor data. Se um evento de formato JSON não tiver o atributo datacontenttype, será presumido que os dados são 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 que adere a 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 bem-sucedido, o servidor retorna um código de status HTTP 200 OK e o corpo de resposta vazio no formato JSON:

200 OK

{}

A seguir