Notificação de evento
Notificação de evento de SMN habilitado
Simple Message Notification (SMN) é um serviço de notificação de mensagens confiável e extensível que pode lidar com um grande número de mensagens. SMN simplifica significativamente o acoplamento do sistema. Ele pode enviar mensagens automaticamente para os assinantes através de e-mails e mensagens de texto.
OBS usa SMN para fornecer a função de notificação de eventos. Você pode usar SMN para enviar notificações de eventos aos assinantes especificados para informá-los em tempo real de operações críticas (como carregamento e exclusão) que ocorrem em buckets especificados. Por exemplo, você pode configurar uma regra de notificação de eventos para enviar mensagens por meio de SMN para o endereço de e-mail especificado sempre que ocorrer uma operação de carregamento no bucket especificado.
Você pode configurar uma regra de notificação de eventos para filtrar objetos pelo prefixo ou sufixo do nome do objeto. Por exemplo, você pode adicionar uma regra de notificação de eventos para enviar notificações sempre que um objeto com o sufixo .jpg for carregado no bucket especificado. Você também pode adicionar uma regra de notificação de eventos para enviar notificações sempre que um objeto com o prefixo images/ for carregado no bucket especificado.
Tipos de eventos suportados por OBS
OBS pode publicar eventos dos seguintes tipos. Você precisa especificar esses tipos de evento nas configurações de notificação.
Tipo de evento |
Descrição |
---|---|
ObjectCreated:* (todas as operações de carregamento) ObjectCreated:Put (carregamento de objeto) ObjectCreated:Post (envio de objetos através de um navegador web) ObjectCreated:Copy (cópia de objetos) ObjectCreated:CompleteMultipartUpload (mescla de peças carregadas) |
OBS pode usar as API como PUT, POST e COPY para criar objetos e configurar tipos de eventos correspondentes. Você receberá uma notificação quando um objeto for criado usando uma API específica. Além disso, você pode usar o tipo de evento ObjectCreated:* para solicitar todas as notificações de criação de objetos.
NOTA:
Você não receberá notificações de eventos de operações com falha. |
ObjectRemoved:* (todas as operações de eliminação) ObjectRemoved:Delete (excluindo objetos) ObjectRemoved:DeleteMarkerCreated (Um objeto deletemarker é criado.) |
Usando os tipos de evento ObjectRemoved, você pode ativar a notificação quando um objeto ou um lote de objetos são removidos de um bucket. Você pode solicitar uma notificação quando um objeto é excluído ou um objeto versionado é excluído permanentemente usando o tipo de evento ObjectRemoved:Delete. Como alternativa, você pode solicitar uma notificação quando um marcador de exclusão for criado para um objeto versionado usando ObjectRemoved:Delete. Você também pode usar ObjectRemoved:* para solicitar uma notificação cada vez que um objeto é excluído.
NOTA:
Você não receberá notificações de eventos de exclusões automáticas de políticas de ciclo de vida ou de operações com falha. |
Restrições
- Uma configuração sem atributos de filtragem contidos corresponde a todos os prefixos e sufixos por padrão.
- Quando há dois sufixos configurados, se uma dada cadeia de caracteres pode terminar com ambos os sufixos, esta configuração é inválida devido à sobreposição de sufixos (por exemplo, sufixos jpg e pg). Isso também funciona para prefixos.
Destinos suportados por OBS
OBS pode enviar mensagens de notificação de eventos para tópicos de SMN. Tem de conceder a OBS as permissões para enviar mensagens para estes destinos. Além disso, você precisa especificar os valores URN desses destinos na configuração de notificação.
Como ativar as notificações de eventos
A ativação de notificações é uma operação no nível do bucket. OBS armazena sua configuração de notificação de eventos em sub-recursos de bucket no formato XML. Por padrão, a notificação não está habilitada para nenhum tipo de evento. Ou seja, a configuração inicial de notificação de evento de cada bucket está vazia.
Para ativar notificações para eventos de tipos específicos, você deve adicionar a configuração XML correspondente que identifica os tipos de evento que você deseja que OBS publique e o destino onde você deseja que as notificações sejam publicadas.
- Neste exemplo, você precisa publicar mensagens de evento em um tópico de SMN. Para definir um tópico SMN como o destino de notificação para tipos de evento específicos, adicione o TopicConfiguration.
<NotificationConfiguration> <TopicConfiguration> <Id>optional-id-string</Id> <Topic>topic-urn</Topic> <Event>event-type</Event> <Event>event-type</Event> ... </TopicConfiguration> ... </NotificationConfiguration>
Para remover todas as configurações de notificação de um bucket, defina o elemento <NotificationConfiguration> como nulo.
Uso de nomes de chave de objeto para filtrar notificações de evento
Você pode definir a notificação de eventos pelo prefixo e sufixo de um nome de chave de objeto. Por exemplo, você pode definir uma configuração para que uma notificação seja publicada somente quando objetos com uma extensão .jpg forem adicionados a um bucket.
OBS armazena a configuração de notificação como XML. Você pode usar o elemento Filter na estrutura XML para definir as regras para que as notificações sejam filtradas pelo prefixo e/ou sufixo de um nome de chave de objeto. As configurações de notificação que usam o filtro não podem definir regras de filtragem com prefixos sobrepostos, sufixos sobrepostos ou sobreposição de prefixos e sufixos. A seguir estão exemplos de configurações de notificação com filtragem de nome de chave de objeto:
- Exemplo de configuração de notificação válida com filtragem de nome de chave de objeto
As informações a seguir contêm uma configuração que identifica um tópico de SMN no qual OBS publica eventos do tipo ObjectCreated:Put. Os eventos serão publicados cada vez que um objeto que tem um prefixo de image e um sufixo jpg for PUT para um bucket.
<NotificationConfiguration> <TopicConfiguration> <Id>01</Id> <Filter> <Object> <FilterRule> <Name>prefix</Name> <Value>image</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </Object> </Filter> <Topic>urn:smn:southchina:11aa22bb:notification</Topic> <Event>ObjectCreated:Put</Event> </TopicConfiguration> </NotificationConfiguration>
A configuração de notificação a seguir tem vários prefixos não sobrepostos. A configuração define o seguinte: Quando os objetos que têm um prefixo de images são carregados em buckets, as notificações de eventos são publicadas no tópico-A; quando os objetos que têm um prefixo de videos são carregados em buckets, as notificações de eventos são publicadas no tópico-B.
<NotificationConfiguration> <TopicConfiguration> <Id>01</Id> <Filter> <Object> <FilterRule> <Name>prefix</Name> <Value>images</Value> </FilterRule> </Object> </Filter> <Topic>urn:smn:southchina:11aa22bb:topic-A</Topic> <Event>ObjectCreated:Put</Event> </TopicConfiguration> <TopicConfiguration> <Id>02</Id> <Filter> <Object> <FilterRule> <Name>prefix</Name> <Value>videos</Value> </FilterRule> </Object> </Filter> <Topic>urn:smn:southchina:11aa22bb:topic-B</Topic> <Event>ObjectCreated:Put</Event> </TopicConfiguration> </NotificationConfiguration>
A configuração de notificação a seguir tem vários sufixos não sobrepostos. A configuração define o seguinte: As notificações serão publicadas no tópico-A para todos os objetos .jpg PUT para buckets e as notificações serão publicadas no tópico-B para todos os objetos .png. Os sufixos .png e .jpg não são sobrepostos, apesar de terem a mesma última letra.
<NotificationConfiguration> <TopicConfiguration> <Id>01</Id> <Filter> <Object> <FilterRule> <Name>suffix</Name> <Value>.jpg</Value> </FilterRule> </Object> </Filter> <Topic>urn:smn:southchina:11aa22bb:topic-A</Topic> <Event>ObjectCreated:Put</Event> </TopicConfiguration> <TopicConfiguration> <Id>02</Id> <Filter> <Object> <FilterRule> <Name>suffix</Name> <Value>.png</Value> </FilterRule> </Object> </Filter> <Topic>urn:smn:southchina:11aa22bb:topic-B</Topic> <Event>ObjectCreated:Put</Event> </TopicConfiguration> </NotificationConfiguration>
- Exemplos de configuração de notificação com sobreposição de prefixo/sufixo inválido
Na maioria dos casos, as configurações de notificação que usam o filtro não podem definir regras de filtragem com prefixos sobrepostos, sufixos sobrepostos ou combinações sobrepostas de prefixos e sufixos para os mesmos tipos de evento. (Você pode ter prefixos sobrepostos se os sufixos não se sobrepõem.) Você pode usar regras de filtragem de nomes de chave de objeto sobrepostos com diferentes tipos de evento. Por exemplo, você pode criar uma configuração de notificação que usa o prefixo de image para o tipo de evento ObjectCreated:Put e o prefixo de image para o tipo de evento ObjectDeleted:*.
Uma configuração sem atributos de filtragem contidos corresponde a todos os prefixos e sufixos por padrão. A configuração de notificação a seguir é inválida porque contém prefixos sobrepostos. (A mesma coisa seria verdadeira se suffix em vez de prefix é usado neste exemplo.)
<NotificationConfiguration> <TopicConfiguration> <Topic>urn:smn:southchina:11aa22bb:topic-A</Topic> <Event>ObjectCreated:*</Event> </TopicConfiguration> <TopicConfiguration> <Filter> <Object> <FilterRule> <Name>prefix</Name> <Value>abc</Value> </FilterRule> </Object> </Filter> <Topic>urn:smn:southchina:11aa22bb:topic-B</Topic> <Event>ObjectCreated:*</Event> </TopicConfiguration> </NotificationConfiguration>
A seguinte configuração de notificação é inválida porque contém sufixos sobrepostos. Dois sufixos são considerados sobrepostos se uma dada cadeia pode terminar com ambos os sufixos. Uma cadeia pode terminar com jpg e pg. Portanto, os sufixos são sobrepostos. (O mesmo vale para os prefixos.)
<NotificationConfiguration> <TopicConfiguration> <Filter> <Object> <FilterRule> <Name>suffix</Name> <Value>jpg</Value> </FilterRule> </Object> </Filter> <Topic>urn:smn:southchina:11aa22bb:topic-A</Topic> <Event>ObjectCreated:*</Event> </TopicConfiguration> <TopicConfiguration> <Filter> <Object> <FilterRule> <Name>suffix</Name> <Value>pg</Value> </FilterRule> </Object> </Filter> <Topic>urn:smn:southchina:11aa22bb:topic-B</Topic> <Event>ObjectCreated:Put</Event> </TopicConfiguration> </NotificationConfiguration>
Estrutura da mensagem de evento
Uma mensagem de notificação enviada por OBS para publicar um evento é uma mensagem JSON com a seguinte estrutura.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
{ "Records":[ { "eventVersion":"", //Version number. The current version is 3.0. "eventSource":"", //Message source. The value is fixed to OBS. "eventRegion":"", //Region where the event occurs "eventTime":"", //Time when an event occurs, in the ISO-8601 format, for example, 2020-07-10T09:24:11.418Z "eventName":"", //Name of the event that triggers the notification "userIdentity":{ "ID":"" //Billing ID of the user who triggers the event }, "requestParameters":{ "sourceIPAddress":"" //Source IP address of the request }, "responseElements":{ "x-obs-request-id":"", //ID of the request "x-obs-id-2":"" ///Special characters for locating problems }, "obs":{ "Version":"1.0", "configurationId":"", //Name of the event notification rule in OBS that matches the event "bucket":{ "name":"examplebucket", "ownerIdentity":{ "ID":"" //Account ID of the bucket owner }, "bucket":"" //Bucket name }, "object":{ "key":"", //Object name "eTag":"", //ETag of the object "size": , //Object size "versionId":"nulo", //Version ID of the object "sequencer":"" //Identifier that defines the event sequence of a specific object } } } ] } |
Observe o seguinte:
- Você pode usar o valor-chave responseElements para rastrear solicitações de OBS. Ambos x-obs-request-id e x-obs-id-2 podem ser usados para rastrear uma única requisição. Seu valor é aquele retornado por OBS na resposta à solicitação.
- O obs chave-valor contém informações sobre o bucket e o objeto envolvidos no evento. Observe que o nome da chave do objeto é codificado por URL. Por exemplo, TEST/Chinese.jpg é alterado para TEST%2F%E4%B8%AD+%E6%96%87%2F.jpg.
Durante o desenvolvimento secundário, se você usar o SDK de OBS para baixar o objeto, precisará decodificar o nome do objeto codificado por URL e chamar a API para download. Se um navegador da web for usado para acessar o objeto, a decodificação não será necessária.
- O sequencer chave-valor determina a seqüência de eventos. Geralmente, as notificações de eventos não chegam na ordem em que os eventos ocorreram. No entanto, as notificações de eventos para criação de objetos (PUT) e exclusão de objetos (DELETE) contêm um sequencer, que pode ser usado para determinar a ordem dos eventos de uma determinada chave de objeto. Se você comparar as cadeias de sequenciador hexadecimal de duas notificações de evento na mesma chave de objeto, a notificação de evento com o maior valor de sequenciador é o evento que ocorreu mais tarde.
- O sequenciador não pode ser usado para determinar a sequência de eventos em diferentes chaves de objeto.
- A seqüência de eventos indicada pelo sequencer é apenas para referência, o que não funciona para sistemas altamente confiáveis
Exemplo de mensagem:
- Test message – When you configure an event notification on a bucket, OBS sends the following test message:
{ "Service":"OBS", "Event":"TestEvent", "Time":"1970-01-01T00:00:00.000Z", "Bucket":"examplebucketname", "RequestId":"0002F4BCF6000001563B064B17B2094D", "HostId":"2Zf+b9AmbaBgNQ+YE8XU2j87DZaBNxu4TaMiOCTqpmkC2SA9ouf8TpB2SY5j3i4" }
- Example message when an object is created using the PUT request – The following is an example of a message sent by OBS to publish an ObjectCreated:Put event:
{ "Records":[ { "eventVersion":"3.0", "eventSource":"OBS", "eventRegion":"cn-east-3", "eventRegion":"region", "eventTime":"2018-06-26T14:37:05.468Z", "eventName":"ObjectCreated:Put", "userIdentity":{ "ID":"71f3901173514e6988115ea2c26d1999" }, "requestParameters":{ "sourceIPAddress":"104.55.173.69" }, "responseElements":{ "x-obs-request-id":"9006000001643C86D03C300BE8860FA7", "x-obs-id-2":"2+/Ucr6uinCJAbUejWyQ+rhxkuf/K/9uoaXuewIi/SE9j4tU5LwaXTTlD1gvMv2o" }, "obs":{ "Version":"1.0", "configurationId":"ConfigurationId", "bucket":{ "name":"examplebucket", "ownerIdentity":{ "ID":"b4bf1b36d9ca43d984fbcb9491b6fce9" }, "bucket":"examplebucket" }, "object":{ "key":"object0001.txt", "eTag":"3b9680702b9a12733c5490d1b15c7607", "size":538, "versionId":"null", "sequencer":"000000001643C86D06576F5320000000" } } } ] }
Devido a problemas de Internet ou restrições no envio de e-mail, as notificações podem não ser enviadas para terminais HTTP ou de e-mail.
Como usar essa função
Você pode configurar notificações de SMN usando console de OBS, as API, ou os SDK.
Ferramenta |
Referência |
---|---|
SDK |
OBS suporta kits de desenvolvimento de software (os SDK) em vários idiomas. Para obter detalhes, consulte o guia do desenvolvedor correspondente na página Visão geral de SDK. |
API |