Pular para o conteúdo principal

Questão de Arquitetura de Software — Sistemas Distribuídos — FGV 2024

Arquitetura de SoftwareSistemas Distribuídos
Código
fg101715
Banca
FGV
Órgão
TRF - 1ª REGIÃO
Ano
2024
Nível
Superior
Cargo
Técnico Judiciário - Área Administrativa - Especialidade: Desenvolvimento de Sistemas de Informação
Adriana está desenvolvendo um sistema assíncrono, que deve receber pacotes de solicitações via mensageria RabbitMQ, e agora precisa definir a lógica de roteamento das mensagens. Foi estabelecido que o nome do exchange será logis, roteando para a fila log_1 com a chave tp1 e para log_2 com a chave de roteamento tp2.Para criar o exchange e efetuar a ligação com as filas, Adriana utilizou os comandos:
  1. Arabbitmqadmin declare exchange name=logis type=fanoutrabbitmqadmin declare binding origin=logis routing_key=tp1type=queue destination=log_1rabbitmqadmin declare binding origin=logis routing_key=tp2type=queue destination=log_2
  2. Brabbitmqadmin declare exchange name=logis type=directrabbitmqctl connect log_1 to logis with routing_key=tp1rabbitmqctl connect log_2 to logis with routing_key=tp2
  3. Crabbitmqadmin declare exchange name=logis type=directrabbitmqadmin declare binding source=logis routing_key=tp1destination_type=queue destination=log_1rabbitmqadmin declare binding source=logis routing_key=tp2destination_type=queue destination=log_2
  4. Drabbitmqctl create exchange logis type=topicrabbitmqctl connect log_1 to logis with routing_key=tp1rabbitmqctl connect log_2 to logis with routing_key=tp2
  5. Erabbitmqctl create exchange logis type=fanoutrabbitmqadmin declare binding source=logis routing_key=tp1destination_type=queue destination=log_1rabbitmqadmin declare binding source=logis routing_key=tp2destination_type=queue destination=log_2
Revelar gabarito e comentário

GabaritoC — rabbitmqadmin declare exchange name=logis type=direct rabbitmqadmin declare binding source=logis routing_key=tp1 destination_type=queue destination=log_1 rabbitmqadmin declare binding source=logis routing_key=tp2 destination_type=queue destination=log_2

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

RabbitMQ: Criação de Exchange e Binding

Gabarito: letra C. A alternativa C usa o comando rabbitmqadmin declare exchange com tipo direct e o comando rabbitmqadmin declare binding com a sintaxe correta (source, routing_key, destination_type, destination), que é a maneira adequada de criar um exchange direto e ligar filas com chaves de roteamento no RabbitMQ. As demais alternativas apresentam erros de ferramenta (uso de rabbitmqctl para tarefas administrativas, que não possui comandos connect ou create exchange nessa sintaxe) ou uso de tipo de exchange incompatível (fanout ignora routing keys).

Alternativa A — ❌ Incorreta

O comando declara um exchange do tipo fanout, que não utiliza chaves de roteamento; todo binding feito nesse exchange receberá todas as mensagens, independente da chave. Além disso, a sintaxe do binding usa origin (incorreto; o correto é source) e type=queue (incorreto; o correto é destination_type=queue).

Alternativa B — ❌ Incorreta

Utiliza rabbitmqctl connect, que não é um comando válido no RabbitMQ. O correto seria usar rabbitmqadmin declare binding. Além disso, mistura ferramentas sem justificativa.

Alternativa C — ✅ Correta ⟵ GABARITO

Utiliza rabbitmqadmin declare exchange type=direct – o tipo direct é apropriado para roteamento baseado em chave exata. Em seguida, usa rabbitmqadmin declare binding com os parâmetros source=logis, routing_key=tp1, destination_type=queue, destination=log_1 (e similar para log_2). Sintaxe completa e correta.

Alternativa D — ❌ Incorreta

Usa rabbitmqctl create exchange, que não é o comando padrão para declaração de exchanges no RabbitMQ. O comando correto no rabbitmqctl seria rabbitmqctl add_vhost ou algo similar, mas para administração de filas/exchanges recomenda-se rabbitmqadmin. Além disso, usa rabbitmqctl connect (inexistente).

Alternativa E — ❌ Incorreta

O exchange é declarado como fanout (via rabbitmqctl create exchange, sintaxe inválida) e depois tenta-se fazer binding com routing keys – o que é inócuo, pois fanout ignora a chave. A mistura de ferramentas também é incorreta.

PEGA ESSA DICA!

No RabbitMQ, lembre-se: para roteamento por chave exata, use exchange direct; para publicação para todas as filas ligadas, use fanout; e para roteamento por padrão de chave (wildcards), use topic. A ferramenta padrão para administração HTTP é rabbitmqadmin; o rabbitmqctl é para gerenciamento via CLI (nós, vhosts, permissões), não para criação de exchanges com parâmetros.

Gabarito: letra C.

Link permanente: /questoes/fg101715