É 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
Abra um terminal.
É 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
gcloud beta eventarc message-buses publish BUS_NAME \ --json-message=JSON_MESSAGE
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 quesource
+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 quesource
+id
sejam exclusivos para cada evento.CONTENT_TYPE
(opcional): o tipo de conteúdo do valordata
. Se um evento de formato JSON não tiver o atributodatacontenttype
, será presumido que os dados são um valor JSON em conformidade com o tipo de mídiaapplication/json
.DATA_PAYLOAD
(opcional): o payload do evento codificado no formato de mídia especificado pordatacontenttype
e que adere adataschema
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 {}