A desktop GUI application for testing and debugging ZeroMQ messaging — like Postman, but for ZMQ.
| Pattern | Description |
|---|---|
| PUB/SUB | Publish/Subscribe - one-to-many message broadcast with topic filtering |
| REQ/REP | Request/Reply - synchronous RPC-style communication |
| PUSH/PULL | Pipeline - task distribution with load balancing |
| DEALER/ROUTER | Advanced async request/reply - handle multiple clients without blocking |
| CLIENT/SERVER | Thread-safe async request/reply (draft API) |
| RADIO/DISH | Group-based multicast messaging (draft API) |
| SCATTER/GATHER | Round-robin distribution with fair-queued collection (draft API) |
| PAIR | Exclusive pair - simple 1:1 bidirectional connection |
| XPUB/XSUB | Extended PUB/SUB - for building brokers, shows subscription events |
| STREAM | Raw TCP - connect to non-ZMQ peers (HTTP servers, etc.) |
- Real-time message statistics (rate, speed, message count)
- Recent message history with quick reuse
- JSON auto-formatting for readable output
- Topic-based message filtering and viewing
- Persistent configuration (addresses, ports, recent messages)
# Clone the repository
git clone https://github.com/rendayigit/ZmqAnalyzer.git
cd ZmqAnalyzer
# Install dependencies
pip install -r requirements.txt
# Install dependencies (alternative, using apt)
sudo apt install -y wxpython-tools python3-zmq
# Run the application
python zmq_analyzer.py# Install with desktop shortcut
sudo ./install.sh
# To uninstall
sudo ./uninstall.sh- Enter a Port number (e.g.,
5555) - Click Bind to start the publisher
- Enter a Topic and your Message
- Click Publish to send
- Enter the publisher Address (e.g.,
tcp://localhost:5555) - Enter a Topic to filter (leave empty for all messages)
- Click Start to begin receiving messages
- Double-click a topic in the list to view its messages in a separate window
- Enter the replyer Address (e.g.,
tcp://localhost:5556) - Type your Request message
- Click Send to send and wait for a response
- Enter a Port number (e.g.,
5556) - Click Bind to start listening
- Incoming requests appear automatically
- Type a Response and click Send to reply
- Enter a Port number (e.g.,
5557) - Click Bind to start the pusher
- Type your Message
- Click Push — messages are distributed to connected pullers in round-robin
- Enter the pusher Address (e.g.,
tcp://localhost:5557) - Click Start to begin receiving messages
- Messages appear in the list as they arrive
- Enter a router Address (e.g.,
tcp://localhost:5558) - Click Connect to establish connection
- Send multiple messages without waiting for replies (async)
- Replies appear in the received panel
- Enter a Port number (e.g.,
5558) - Click Bind to start listening
- Incoming requests from dealers appear automatically
- Type a Reply and click Send to respond
- Select Mode: Connect (client) or Bind (server)
- Enter Address (e.g.,
tcp://localhost:5559) or port number for bind mode - Click Start to establish exclusive 1:1 connection
- Send and receive messages bidirectionally
- Enter a Port number (e.g.,
5560) - Click Bind to start the extended publisher
- Enter a Topic and your Message
- Click Publish — subscription events from clients appear on the right panel
- Enter the XPUB Address (e.g.,
tcp://localhost:5560) - Enter Topics to filter (comma-separated, leave empty for all)
- Click Start to begin receiving messages
- Works like Subscriber but with explicit subscription control
- Enter the server Address (e.g.,
tcp://localhost:5555) - Click Connect to establish connection
- Type your Message and click Send
- Replies from the server appear in the received panel
- Unlike REQ, you can send multiple messages without waiting for replies
- Enter a Port number (e.g.,
5555) - Click Bind to start listening
- Incoming requests from clients appear automatically
- Type a Reply and click Send to respond
- Unlike REP, can handle multiple clients asynchronously
- Enter a Port number (e.g.,
5556) - Click Bind to start the radio broadcaster
- Enter a Group name (e.g.,
weather,news) - Type your Message and click Broadcast
- Messages are sent only to dishes that joined that group
- Enter the radio Address (e.g.,
tcp://localhost:5556) - Enter Groups to join (comma-separated, e.g.,
weather,news) - Click Start to begin receiving messages
- Only messages sent to your joined groups will be received
- Enter a Port number (e.g.,
5557) - Click Bind to start the scatter distributor
- Type your Message and click Scatter
- Messages are distributed round-robin to connected gatherers
- Enter the scatter Address (e.g.,
tcp://localhost:5557) - Click Start to begin receiving messages
- Messages are fair-queued from all connected scatterers
- Statistics show message count, data size, and speed
- Select Mode: Connect (to a TCP server) or Bind (accept connections)
- Enter Address (e.g.,
tcp://localhost:8080) or port number - Click Start to establish raw TCP connection
- Send raw data (e.g., HTTP requests) and receive raw responses
Settings are automatically saved to ~/.zmqanalyzer-config.json and restored on startup, including:
- Last used addresses and ports
- Recent messages for quick reuse
- Topic subscriptions
- Python 3.x
- wxPython
- pyzmq
