Publica eventos directamente

Puedes publicar un evento de CloudEvents directamente en un bus avanzado de Eventarc en un formato compatible con Google Cloud CLI o enviando una solicitud a la API de REST de Eventarc Publishing. También puedes usar las bibliotecas cliente de Eventarc para acceder a las APIs de Eventarc desde un lenguaje compatible.

El mensaje debe cumplir con la especificación de CloudEvents.

gcloud

  1. Abre una terminal.

  2. Puedes publicar eventos en un bus con el comando gcloud beta eventarc message-buses publish. Por ejemplo:

    gcloud beta eventarc message-buses publish BUS_NAME \
        --avro-message=AVRO_MESSAGE
    O bien:
    gcloud beta eventarc message-buses publish BUS_NAME \
        --json-message=JSON_MESSAGE
    O bien:
    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

    Reemplaza lo siguiente:

    • BUS_NAME: El ID o el identificador completamente calificado del bus al que se publicará el evento.

    Debes usar solo uno de los siguientes:

    • AVRO_MESSAGE: Es el mensaje del evento en formato Avro según esta especificación.
    • JSON_MESSAGE: Es el mensaje del evento en formato JSON según esta especificación.
    • DATA_PAYLOAD: Los datos de un evento publicado.

    Si usas la marca --event-data, también debes usar lo siguiente:

    • EVENT_ID: Es el identificador del evento. Los productores de eventos deben asegurarse de que source + id sea único para cada evento distinto.
    • EVENT_SOURCE: Es la fuente de eventos de un evento publicado.
    • EVENT_TYPE: Es el tipo de evento relacionado con el evento de origen.

    Si usas la marca --event-data, puedes usar lo siguiente de manera opcional:

    • EVENT_ATTRIBUTE: Son los atributos de un evento publicado. Puedes repetir la marca --event-attributes para agregar más atributos.

      Ten en cuenta que los eventos pueden incluir cualquier cantidad de atributos CloudEvents personalizados adicionales con nombres distintos (también conocidos como atributos de extensión).

Ejemplos:

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 de REST

Para publicar un evento en un bus, usa el método projects.locations.messageBuses.publish.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • El nombre de recurso completo del bus en el formato projects/PROJECT_ID/locations/LOCATION/messageBuses/BUS_NAME

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto de Google Cloud del proyecto de autobús.
    • LOCATION: Es la región en la que se implementa el bus, por ejemplo, us-central1.
    • BUS_NAME: Es el nombre del bus al que se publicará el evento.
  • SPEC_VERSION: Es la versión de la especificación de CloudEvents que usa el evento, por ejemplo, 1.0.
  • EVENT_TYPE: Es el tipo de evento relacionado con el evento de origen.
  • EVENT_SOURCE: Es la fuente de eventos de un evento publicado.
  • EVENT_ID: Es el identificador del evento. Los productores deben asegurarse de que source + id sea único para cada evento distinto.
  • CONTENT_TYPE (opcional): Es el tipo de contenido del valor data. Si un evento con formato JSON no tiene el atributo datacontenttype, se supone que los datos son un valor JSON que cumple con el tipo de contenido multimedia application/json.
  • DATA_PAYLOAD (opcional): Es la carga útil del evento codificada en el formato multimedia que especifica datacontenttype y que cumple con dataschema cuando están presentes esos atributos.

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, expande una de estas opciones:

Si se realiza correctamente, el servidor muestra un código de estado HTTP 200 OK y el cuerpo de respuesta vacío en formato JSON:

200 OK

{}

¿Qué sigue?