Mensagens de Fan Out para Muitos Grupos de Consumidores em uma Fila
Remova mensagens de uma única Fila do OCI para muitos grupos de consumidores e aplique filtros para cada grupo, permitindo mensagens escaláveis, de baixa latência e baseadas em pull-to-application
Com fanout, você pode enviar uma mensagem para diferentes grupos de consumidores ao mesmo tempo, facilitando o compartilhamento de atualizações com muitas equipes ou serviços de apenas uma fila. Isso é útil porque você pode controlar exatamente quem recebe quais mensagens, então cada grupo só vê o que é relevante para eles.
Para usar fanout, você cria filtros que avaliam os atributos de mensagem anexados a cada mensagem. Somente os grupos de consumidores para os quais o filtro é avaliado como true recebem a mensagem.
Grupos de Consumidores
O grupo principal garante que cada mensagem tenha um destino. Quando você define o grupo de consumidores principal como inativo, não recebe mensagens por meio dele. O sistema elimina todas as mensagens enviadas enquanto o grupo principal está inativo e que não correspondem aos filtros em outros grupos; essas mensagens não podem ser recuperadas. Para evitar a perda de mensagens, mantenha o grupo de consumidores principal ativado, a menos que você pretenda descartar especificamente algumas mensagens.
Além do grupo de consumidores padrão, você pode adicionar quantos grupos de consumidores precisar para entregar mensagens a consumidores específicos. Cada grupo opera de forma independente dos outros, de modo que as mensagens são entregues, filtradas e rastreadas separadamente, garantindo isolamento e justiça entre os consumidores. Você pode definir um filtro para cada grupo para controlar quais mensagens ele recebe. Se você não definir um filtro ou deixar o filtro vazio, o grupo receberá todas as mensagens, como no grupo padrão.
Este é um resumo das diferenças entre o grupo de consumidores padrão (principal) e os grupos de consumidores que você cria:
| Recurso | Grupo de Consumidores Padrão (Principal) | Outros Grupos de Consumidores |
|---|---|---|
| Como criar | Criado automaticamente quando grupos de consumidores são ativados | Criado manualmente conforme necessário |
| Pode ser excluído | Não | Sim |
| Pode ser desativado | Sim | Sim |
| Pode ter filtros | Não | Sim |
| Recebe todas as mensagens | Sim, se ativado | Somente mensagens correspondentes ao filtro ou todas as mensagens se nenhum filtro for definido |
| A contagem de entrega de DLQ pode ser definida | Não | Sim |
| OCID | Igual ao OCID da fila | OCID exclusivo por grupo |
Exemplo de uso
Suponha que você crie uma fila para eventos de faturamento. O grupo de consumidores padrão é para a equipe de conformidade de faturamento, que precisa receber todas as mensagens por motivos de conformidade. Você também adiciona outro grupo de consumidores para a equipe que lida com despesas executivas e define um filtro para que esse grupo receba apenas mensagens com o atributo team = "exec-expenses". Isso reduz o ruído para a equipe de despesas executivas, garantindo que eles recebam apenas mensagens relevantes.
Mensagens e Atributos
Uma mensagem pode incluir opcionalmente atributos, pares de chave/valor adicionados pelo produtor como informações extras (metadados). Os atributos podem descrever qualquer detalhe sobre a mensagem (como região, prioridade ou tipo de evento) e ajudá-lo a executar filtragem detalhada e direcionamento de mensagens para grupos de consumidores.
Aqui estão algumas diretrizes para produtores ao criar atributos:
- As chaves e os valores de atributo diferenciam maiúsculas de minúsculas.
- Os valores de atributo devem ser um destes tipos de dados suportados:
- String: Uma string codificada em UTF-8.
- Número: Um valor numérico inteiro ou decimal.
- Os atributos contam para o tamanho total da mensagem.
- As chaves de atributo devem começar com uma letra ou um sublinhado (_).
- As chaves de atributo só podem incluir letras, números, hifens (-) ou sublinhados (_).
- Não use aspas ao redor das teclas.
Filtrando
Os filtros só funcionam com atributos de mensagem, não com o corpo da mensagem.
Você cria filtros ao criar um grupo de consumidores. Cada grupo de consumidores pode ter seu próprio filtro, e você pode criar um filtro por grupo de consumidores.
Uma expressão de filtro é uma regra semelhante a SQL que você escreve para decidir quais mensagens um grupo recebe.
Filtrar restrições de expressão
- As expressões de filtro fazem distinção entre maiúsculas e minúsculas. Por exemplo,
:region = "us-ashburn-1"é diferente de:region = "US-ASHBURN-1". - As expressões de filtro podem ter até 256 caracteres.
Filtrar Avaliação
- O Serviço de Fila verifica os filtros somente quando uma mensagem é publicada pela primeira vez na fila.
- O Serviço de Fila verifica os filtros somente quando uma mensagem é publicada pela primeira vez na fila. Se posteriormente você reativar um grupo de consumidores ou alterar seu filtro, as mensagens existentes na fila não serão avaliadas retroativamente. Somente novas mensagens são verificadas no filtro atualizado.
- Se nenhum filtro do grupo de consumidores corresponder a uma mensagem e o grupo principal estiver desativado, a mensagem será eliminada e não poderá ser recuperada. A fila emite uma métrica sempre que uma mensagem é eliminada. Você pode exibir essa métrica na Console no Serviço de Fila ou no OCI Monitoring.
Modelo de Expressões de Filtro
Estes são os tipos de expressões de filtro que você pode usar:
Presença chave
Use os filtros de presença-chave para verificar se uma mensagem inclui ou não um determinado atributo.
Veja alguns exemplos de expressões de filtro:
:region: Corresponde às mensagens que têm o atributoregiondefinido, não importa qual seja seu valor.NOT :region: Corresponde às mensagens que não têm o atributoregion.
Filtros de string
Use filtros de string para corresponder mensagens com base no valor de um atributo de texto. Você pode verificar se há correspondências, diferenças ou padrões exatos no texto.
Veja alguns exemplos de expressões de filtro:
:name = "Bob": Corresponde às mensagens em que o atributonameé exatamente 'Bob'.:name != "Bob": Corresponde a mensagens em que o atributonamenão é 'Bob'.hasPrefix(:name, "Bo"): Corresponde às mensagens em que o atributonamecomeça com 'Bo'.hasSuffix(:name, "ob"): Corresponde às mensagens em que o atributonametermina com 'ob'.NOT hasPrefix(:name, "Bo"): Corresponde a mensagens em que o atributonamenão começa com 'Bo'.
Filtros de número
Use filtros de número para corresponder mensagens com base no valor de um atributo numérico.
Seguem alguns exemplos:
:age = 40: Corresponde às mensagens em que o atributoageé exatamente 40.:age != 40: Corresponde a mensagens em que o atributoagenão é 40.:age > 40: Corresponde a mensagens em que o atributoageé maior que 40.:age >= 40: Corresponde a mensagens em que o atributoageé maior ou igual a 40.:age < 40: Corresponde a mensagens em que o atributoageé menor que 40.:age <= 40: Corresponde a mensagens em que o atributoageé menor ou igual a 40.
Filtros lógicos
A precedência do operador é a seguinte: os parênteses ( ) têm a maior precedência, seguidos por NOT, AND, OR.
Seguem alguns exemplos:
:name = "Bob" AND :age = 40: Corresponde às mensagens em que o atributonameé "Bob" eageé 40.:name = "Bob" OR :age = 40: Corresponde a mensagens em que o atributonameé "Bob" ouageé 40.:name = "Bob" AND NOT :age: Corresponde às mensagens em que o atributonameé 'Bob' e não há nenhum atributoage.
Filtros complexos
A precedência do operador é a seguinte: os parênteses ( ) têm a maior precedência, seguidos por NOT, AND, OR.
Eis aqui um exemplo:
:name = "Bob" AND NOT (:age > 40 OR :location = "Chicago"): Corresponde a mensagens em que o atributonameé "Bob" eagenão tem mais de 40 oulocationnão é "Chicago".
Políticas do serviço IAM
Verifique as políticas do serviço IAM necessárias para trabalhar com grupos de consumidores e fanout.
Melhores práticas
- Comece com pequenos filtros para verificar se a entrega da mensagem está funcionando conforme o esperado. Adicione lógica de filtro complexa lentamente, testando conforme o uso.
- Monitorar a métrica de mensagens eliminadas no OCI Monitoring. Isso ajuda a capturar mensagens que foram eliminadas porque nenhum filtro correspondeu.
- Use a nomeação consistente para atributos de mensagem de todos os produtores. Isso torna a escrita e a manutenção de filtros mais fáceis e confiáveis.
- Se uma chave de atributo não seguir as regras [começando com uma letra ou um sublinhado (_), inclua apenas letras, números, hifens (-) ou sublinhados (_)], adicione aspas à sua volta na expressão de filtro.