3.9 KiB
3.9 KiB
RabbitMQ Test Suite
This directory contains comprehensive tests for different RabbitMQ exchange types and patterns.
Test Files
Individual Test Files
-
run_fanout_test.py- Tests Fanout Exchange- Broadcasts messages to all bound queues
- Demonstrates one-to-many messaging pattern
- Run:
python run_fanout_test.py
-
run_direct_test.py- Tests Direct Exchange- Routes messages based on exact routing key matches
- Demonstrates selective message routing
- Run:
python run_direct_test.py
-
run_topic_test.py- Tests Topic Exchange- Routes messages using wildcard patterns (* and #)
- Demonstrates hierarchical message routing
- Run:
python run_topic_test.py
-
run_multi_queue_test.py- Tests Multi-Queue Load Balancing- Distributes messages across multiple queues
- Demonstrates load balancing and parallel processing
- Run:
python run_multi_queue_test.py
Combined Test File
test.py- Runs all tests sequentially- Executes all exchange type tests in order
- Run:
python test.py
Test Features
Producer and Consumer Coordination
- Each test starts consumers in the background
- Producers send messages after consumers are ready
- Tests demonstrate real-time message processing
- Automatic cleanup and task cancellation
Message Patterns Tested
Fanout Exchange
- Pattern: One-to-many broadcasting
- Queues: 3 queues (demo.fanout.queue-0, demo.fanout.queue-1, demo.fanout.queue-2)
- Behavior: All queues receive every message
- Use Case: Notifications, announcements, logging
Direct Exchange
- Pattern: Exact routing key matching
- Queues: error, warning, info (with debug routing to info)
- Behavior: Messages routed based on exact routing key
- Use Case: Log level routing, priority-based processing
Topic Exchange
- Pattern: Wildcard pattern matching
- Queues: Critical, Success, Failed
- Behavior: Messages routed using * and # wildcards
- Use Case: Hierarchical event routing, microservice communication
Multi-Queue Load Balancing
- Pattern: Round-robin distribution
- Queues: 3 balanced queues
- Behavior: Messages distributed evenly across queues
- Use Case: Horizontal scaling, parallel processing
Running Tests
Prerequisites
- RabbitMQ server running on localhost:5673
- Python 3.7+ with asyncio support
- Required packages: aio-pika
Individual Test Execution
# Test Fanout Exchange
python run_fanout_test.py
# Test Direct Exchange
python run_direct_test.py
# Test Topic Exchange
python run_topic_test.py
# Test Multi-Queue Load Balancing
python run_multi_queue_test.py
Run All Tests
python test.py
Test Output
Each test provides detailed output showing:
- Consumer startup messages
- Message reception and processing
- Queue routing behavior
- Message persistence status
- Test completion status
Configuration
Tests use the configuration from config.py:
- RabbitMQ URI:
amqp://guest:guest@localhost:5673/ - Exchange and queue naming conventions
- Message persistence settings
Architecture
Producer Side
- Sets up exchanges and queues
- Publishes test messages with appropriate routing keys
- Handles connection management
Consumer Side
- Starts multiple consumers for different queues
- Processes messages with simulated business logic
- Demonstrates concurrent message handling
Test Coordination
- Uses asyncio tasks for concurrent execution
- Implements proper startup/shutdown sequences
- Ensures clean resource cleanup
Extending Tests
To add new test scenarios:
- Create a new test file following the naming pattern
run_xxx_test.py - Import appropriate producer and consumer functions
- Implement the test logic with proper async/await patterns
- Add consumer startup, message publishing, and cleanup phases
- Update this README with the new test description