Questão nº 67
Questão de Tecnologia da Informação · FGV TRF1 2024 (nº 67)
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:
- Arabbitmqadmin declare exchange name=logis type=fanout
rabbitmqadmin declare binding origin=logis routing_key=tp1 type=queue destination=log_1
rabbitmqadmin declare binding origin=logis routing_key=tp2 type=queue destination=log_2 - Brabbitmqadmin declare exchange name=logis type=direct
rabbitmqctl connect log_1 to logis with routing_key=tp1
rabbitmqctl connect log_2 to logis with routing_key=tp2 - Crabbitmqadmin 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 (alternativa correta) - Drabbitmqctl create exchange logis type=topic
rabbitmqctl connect log_1 to logis with routing_key=tp1
rabbitmqctl connect log_2 to logis with routing_key=tp2 - Erabbitmqctl create exchange logis type=fanout
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
Resposta comentada
Gabarito Alternativa C
O RabbitMQ usa "exchanges" (centrais de troca) para receber mensagens e "roteá-las" para "filas" (caixas de entrada), e o "tipo" do exchange define como esse roteamento acontece. Para rotear mensagens para filas específicas com base em chaves de roteamento exatas, usamos um exchange do tipo "direct".
- (A) Incorreta: O tipo
fanoutenvia a mensagem para todas as filas conectadas, ignorando a chave de roteamento, o que não atende ao requisito de roteartp1paralog_1etp2paralog_2. Além disso, a sintaxeoriginetype=queuepara o binding é menos comum ou incorreta pararabbitmqadmin, que usasourceedestination_type=queue. Armadilha da banca: Ofanouté um tipo de exchange comum, mas inadequado para roteamento baseado em chaves específicas, e a sintaxe do binding está ligeiramente incorreta, tornando-a um distrator tentador. - (B) Incorreta: Embora o tipo
directesteja correto, o comandorabbitmqctl connectnão é a forma padrão ou correta de criar um binding entre um exchange e uma fila no RabbitMQ; orabbitmqctlusabindoudeclare binding. - (C) Correta: O comando
rabbitmqadmin declare exchange name=logis type=directcria um exchange do tipodirect, que é o ideal para rotear mensagens com base em uma chave de roteamento exata. Os comandosrabbitmqadmin declare binding source=logis routing_key=tp1 destination_type=queue destination=log_1erabbitmqadmin declare binding source=logis routing_key=tp2 destination_type=queue destination=log_2criam as ligações (bindings) corretas, conectando o exchangelogisàs filaslog_1elog_2com as respectivas chaves de roteamentotp1etp2. - (D) Incorreta: O tipo
topicusa padrões (*,#) para roteamento, não chaves exatas comotp1etp2. Além disso, o comandorabbitmqctl create exchangenão é o comando padrão para declarar exchanges; seriarabbitmqctl declare exchange. O comandorabbitmqctl connecttambém está incorreto para bindings. - (E) Incorreta: O tipo
fanoutestá incorreto, pois ignora chaves de roteamento. O comandorabbitmqctl create exchangetambém está incorreto para declarar exchanges. Embora a sintaxe dorabbitmqadmin declare bindingesteja correta, o tipo de exchange e o comando para criá-lo estão errados.
Fonte: FGV TRF1 2024 Técnico Judiciário - Desenvolvimento de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.