Publicar eventos directamente

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

Antes de empezar

Si aún no lo has hecho, habilita la API de Eventarc y la API de Eventarc Publishing.

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

Publicar directamente

El mensaje de evento que publiques directamente debe cumplir la especificación de CloudEvents.

gcloud

  1. Abre la terminal.

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

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

    Haz los cambios siguientes:

    • BUS_NAME: el ID o el identificador completo del bus en el que se va a publicar el evento.

    Solo debes usar uno de los siguientes:

    • AVRO_MESSAGE: el mensaje del evento en formato Avro según esta especificación.
    • JSON_MESSAGE: 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: el identificador del evento. Los productores de eventos deben asegurarse de que source + id sea único para cada evento distinto.
    • EVENT_SOURCE: la fuente de eventos de un evento publicado.
    • EVENT_TYPE: el tipo de evento relacionado con la ocurrencia de origen.

    Si usas la marca --event-data, puedes usar opcionalmente lo siguiente:

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

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

Ejemplos:

gcloud 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 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 un evento en un bus, usa el método projects.locations.messageBuses.publish.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • Nombre completo del recurso de bus con el formato projects/PROJECT_ID/locations/LOCATION/messageBuses/BUS_NAME

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de proyecto del proyecto de autobús. Google Cloud
    • LOCATION: la región en la que se ha desplegado el autobús. Por ejemplo, us-central1.
    • BUS_NAME: el nombre del bus en el que se publicará el evento.
  • SPEC_VERSION: la versión de la especificación de CloudEvents que usa el evento. Por ejemplo, 1.0.
  • EVENT_TYPE: el tipo de evento relacionado con la repetición de origen.
  • EVENT_SOURCE: la fuente de eventos de un evento publicado.
  • EVENT_ID: el identificador del evento. Los productores deben asegurarse de que source + id sea único para cada evento distinto.
  • CONTENT_TYPE (opcional): el tipo de contenido de data value. Si un evento en formato JSON no tiene el atributo datacontenttype, se presupone que los datos son un valor JSON que se ajusta al tipo de medio application/json.
  • DATA_PAYLOAD (opcional): la carga útil del evento codificada en el formato multimedia especificado por datacontenttype y que cumple 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, despliega una de estas opciones:

Si la solicitud se realiza de forma correcta, el servidor devuelve un código de estado HTTP 200 OK y el cuerpo vacío de la respuesta en formato JSON:

200 OK

{}

Siguientes pasos