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

Um grupo de consumidores é um caminho de entrega lógico e persistente dentro de uma fila. Cada grupo de consumidores recebe mensagens separadamente, com base nos filtros definidos.
Observação

É necessário ativar grupos de consumidores para poder usá-los em uma fila. Você pode fazer isso ao criar ou editar uma fila.
Quando você ativa grupos de consumidores para uma fila, o Serviço de Fila cria automaticamente um grupo padrão chamado grupo de consumidores principal. Embora não seja possível adicionar filtros ao grupo padrão ou excluí-lo, você pode desativá-lo, se necessário. Você pode pensar nesse grupo como um superconjunto: desde que ele esteja ativado, ele receberá todas as mensagens publicadas na fila, independentemente de quaisquer filtros definidos para outros grupos.
Observação

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.
Veja algumas dicas ao nomear chaves de atributo:
  • 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

Use filtros para controlar quais mensagens um grupo de consumidores recebe. Quando uma mensagem é publicada, o Serviço de Fila verifica o filtro em relação aos atributos de cada mensagem para decidir se a mensagem deve ser entregue a esse grupo de consumidores. Uma mensagem será entregue a um grupo de consumidores somente se seu filtro corresponder aos atributos
Observação

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

Veja a seguir as regras que definem como você escreve e usa expressões de filtro, para que os filtros funcionem da maneira que você deseja:
  • 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

Veja o que acontece quando o OCI Queue Service verifica os filtros e o que acontece com as mensagens que não correspondem a nenhum filtro:
  • 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 atributo region definido, não importa qual seja seu valor.
  • NOT :region: Corresponde às mensagens que não têm o atributo region.

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 atributo name é exatamente 'Bob'.
  • :name != "Bob": Corresponde a mensagens em que o atributo name não é 'Bob'.
  • hasPrefix(:name, "Bo"): Corresponde às mensagens em que o atributo name começa com 'Bo'.
  • hasSuffix(:name, "ob"): Corresponde às mensagens em que o atributo name termina com 'ob'.
  • NOT hasPrefix(:name, "Bo"): Corresponde a mensagens em que o atributo name nã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 atributo age é exatamente 40.
  • :age != 40: Corresponde a mensagens em que o atributo age não é 40.
  • :age > 40: Corresponde a mensagens em que o atributo age é maior que 40.
  • :age >= 40: Corresponde a mensagens em que o atributo age é maior ou igual a 40.
  • :age < 40: Corresponde a mensagens em que o atributo age é menor que 40.
  • :age <= 40: Corresponde a mensagens em que o atributo age é menor ou igual a 40.

Filtros lógicos

Use operadores lógicos para combinar regras e criar filtros mais flexíveis. Os operadores suportados são E, OU e NÃO.
Observação

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 atributo name é "Bob" e age é 40.
  • :name = "Bob" OR :age = 40: Corresponde a mensagens em que o atributo name é "Bob" ou age é 40.
  • :name = "Bob" AND NOT :age: Corresponde às mensagens em que o atributo name é 'Bob' e não há nenhum atributo age.

Filtros complexos

Use uma lógica mais complexa combinando vários filtros com parênteses e vários operadores lógicos.
Observação

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 atributo name é "Bob" e age não tem mais de 40 ou location nã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.