Uma equipe de analistas está desenvolvendo um sistema de no...

Próximas questões
Com base no mesmo assunto
Q3874363 Arquitetura de Software
Uma equipe de analistas está desenvolvendo um sistema de notificação em tempo real para informar outros sistemas sobre alterações de status em processos judiciais. A equipe deve basear o sistema em filas de mensagens, utilizando um servidor RabbitMQ. A fim de minimizar os custos associados ao tráfego de notificações, o sistema deve buscar, o máximo possível, entregar cada notificação exatamente uma vez. Para que o sistema opere dentro dos critérios propostos, a equipe deve configurar o servidor RabbitMQ de forma a:
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: D

Fundamento decisivo: A decisão dependia de comparar as opções segundo o objetivo do enunciado: maximizar a confiabilidade da entrega no RabbitMQ e reduzir perdas e reentregas. Nesse critério, apenas D reúne mecanismos de confirmação no envio e de durabilidade no broker, enquanto as demais alternativas recorrem a recursos temporários, transitórios ou sem persistência.

Tema central: Confiabilidade no RabbitMQ
Análise das alternativas
A
Errada
Incorreta porque usa dois elementos que fragilizam a confiabilidade: filas temporárias, que são efêmeras, e desativação de ACKs, que reduz a confirmação do processamento/recebimento. O efeito é aumentar risco de perda, não reduzi-lo.
B
Errada
Incorreta porque fanout exchange trata de roteamento para múltiplos destinos, e filas exclusivas ficam vinculadas a uma conexão ou consumidor específico. Isso não enfrenta o ponto central da questão, que é confirmação e durabilidade para entrega mais confiável.
C
Errada
Incorreta porque NACK não é mecanismo de garantia de entrega única; é mecanismo de rejeição, podendo levar a reentrega. Além disso, mensagens transitórias são menos resilientes do que mensagens persistentes, o que enfraquece a confiabilidade.
D
Certa
A alternativa D está certa porque combina os dois mecanismos que, entre as opções dadas, mais fortalecem a confiabilidade da entrega: publisher confirms e persistência/durabilidade. Publisher confirms permitem ao produtor saber se a mensagem foi aceita pelo broker; filas duráveis e mensagens persistentes aumentam a sobrevivência da mensagem em caso de reinicialização do servidor. Isso não equivale, por si só, a uma garantia formal de exactly-once em sentido absoluto, mas é a configuração que melhor atende ao objetivo da questão de minimizar perdas e duplicações.
E
Errada
Incorreta porque ACK manual no consumidor é útil para evitar perda antes do processamento, mas a própria alternativa desabilita a persistência de mensagens. Assim, melhora um ponto do consumo, mas enfraquece a preservação da mensagem no broker e não se torna a melhor configuração para o critério cobrado.
Pegadinha da questão
A confusão principal era achar que ACK do consumidor, fanout ou NACK resolvem o problema central. O que decidia não era roteamento nem rejeição, mas sim combinar confirmação de publicação com durabilidade/persistência; além disso, a expressão "exatamente uma vez" foi usada de forma mais forte do que a garantia formal que essas configurações entregam sozinhas.
Dica para questões semelhantes
  • Se a questão cobrar maior confiabilidade no RabbitMQ, procure mecanismos de confirmação no envio ao broker e de durabilidade da mensagem no armazenamento.
  • Não trate ACK manual do consumidor como solução suficiente quando faltar persistência ou durabilidade no broker.
  • Separe função de roteamento de função de confiabilidade: exchange define distribuição; confirmação e persistência tratam da robustez da entrega.
  • Desconfie de termos como temporária, exclusiva e transitória quando o objetivo for maximizar sobrevivência da mensagem.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

A alternativa que contempla essas exigências é a D: ativar publisher confirms, usar filas duráveis e mensagens persistentes. Essa combinação assegura a confiabilidade da seguinte forma:

  • Publisher Confirms: garante que o produtor receba uma confirmação de que o RabbitMQ recebeu e persistiu a mensagem corretamente. Isso evita que o produtor precise reenviar a mensagem por falta de certeza, reduzindo o tráfego desnecessário na rede.
  • Filas Duráveis e Mensagens Persistentes: assegura que as mensagens não sejam perdidas mesmo em caso de reinicialização ou falha do broker RabbitMQ.

Portanto, a configuração descrita na letra D é a que melhor equilibra a confiabilidade da entrega com a minimização de custos operacionais, sendo a recomendada para o cenário descrito.

❌ Alternativa A

Usar filas temporárias e desativar ACKs.

  • Para que serve: Cenários de dados efêmeros, como logs de depuração ou notificações descartáveis. As filas desaparecem quando o consumidor se desconecta, e mensagens não confirmadas são perdidas ao reiniciar o broker.

❌ Alternativa B

Definir fanout exchanges com filas exclusivas.

  • Para que serve: Distribuir uma mensagem para todas as filas vinculadas (broadcast). Filas exclusivas são temporárias e pertencem a uma única conexão. Útil para eventos em tempo real onde cada consumidor recebe cópia idêntica, mas sem garantia de persistência.

❌ Alternativa C

Ativar o modo NACK nos consumidores e usar mensagens transitórias.

Para que serve: NACK (rejeição com requeue) permite devolver mensagens problemáticas para a fila, útil para tratamento de erros temporários. Mensagens transitórias (não persistentes) são armazenadas apenas em memória, ganhando desempenho.

❌ Alternativa E

Habilitar ACKs manuais nos consumidores e desabilitar persistência de mensagens.

Para que serve: ACK manual dá controle ao consumidor para confirmar só após processamento completo. Sem persistência, as mensagens ficam apenas em RAM – ótimo para throughput alto onde perda eventual é aceitável.

Fonte: DeepSeek

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo