4. You run this code but get an error: channel.basic_publish(exchange='logs', routing_key='info', body='Hello'). What is the most likely cause?
medium
A. The routing key 'info' is invalid syntax
B. The exchange 'logs' was not declared before publishing
C. The body parameter must be a dictionary, not a string
D. The connection to RabbitMQ server is missing
Solution
Step 1: Understand error cause in publishing
Publishing to an undeclared exchange causes an error in RabbitMQ.
Step 2: Evaluate other options
Routing key syntax is valid, body can be string, and connection is assumed established.
Final Answer:
The exchange 'logs' was not declared before publishing -> Option B
Quick Check:
Undeclared exchange causes publish error [OK]
Hint: Always declare exchange before publishing [OK]
Common Mistakes:
Assuming routing key syntax causes error
Thinking body must be dictionary
Ignoring exchange declaration step
5. You want to publish messages to different queues based on severity (info, warning, error) using a direct exchange named 'logs_direct'. Which code snippet correctly publishes a message with severity 'error'?
hard
A. channel.exchange_declare(exchange='logs_direct', exchange_type='direct')\nchannel.basic_publish(exchange='logs_direct', routing_key='error', body='Error occurred')
B. channel.basic_publish(exchange='logs_direct', routing_key='error', body='Error occurred')
channel.exchange_declare(exchange='logs_direct', exchange_type='direct')
C. channel.exchange_declare(exchange='logs_direct', exchange_type='fanout')\nchannel.basic_publish(exchange='logs_direct', routing_key='error', body='Error occurred')
D. channel.exchange_declare(exchange='logs_direct', exchange_type='topic')\nchannel.basic_publish(exchange='logs_direct', routing_key='error', body='Error occurred')
Solution
Step 1: Declare the direct exchange before publishing
Exchange must be declared before publishing; channel.exchange_declare(exchange='logs_direct', exchange_type='direct')\nchannel.basic_publish(exchange='logs_direct', routing_key='error', body='Error occurred') declares 'logs_direct' as direct first.
Step 2: Publish with routing key matching severity
channel.exchange_declare(exchange='logs_direct', exchange_type='direct')\nchannel.basic_publish(exchange='logs_direct', routing_key='error', body='Error occurred') uses routing_key='error' which matches the severity for direct exchange routing.
Step 3: Check other options for errors
Other options have issues: fanout exchange ignores routing key, publishing before declaring the exchange is wrong order, topic exchange uses patterns instead of exact routing keys.
Final Answer:
Declare direct exchange then publish with routing_key='error' -> Option A
Quick Check:
Declare direct exchange first + correct routing key = channel.exchange_declare(exchange='logs_direct', exchange_type='direct')\nchannel.basic_publish(exchange='logs_direct', routing_key='error', body='Error occurred') [OK]
Hint: Declare exchange before publish; direct exchange uses routing_key [OK]
Common Mistakes:
Publishing before declaring exchange
Using fanout exchange when routing key matters
Confusing topic and direct exchange types
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.