| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- # SeaweedFS Message Queue Test Makefile
- # Build configuration
- GO_BUILD_CMD=go build -o bin/$(1) $(2)
- GO_RUN_CMD=go run $(1) $(2)
- # Default values
- AGENT_ADDR?=localhost:16777
- TOPIC_NAMESPACE?=test
- TOPIC_NAME?=test-topic
- PARTITION_COUNT?=4
- MESSAGE_COUNT?=100
- CONSUMER_GROUP?=test-consumer-group
- CONSUMER_INSTANCE?=test-consumer-1
- # Create bin directory
- $(shell mkdir -p bin)
- .PHONY: all build clean producer consumer test help
- all: build
- # Build targets
- build: build-producer build-consumer
- build-producer:
- @echo "Building producer..."
- $(call GO_BUILD_CMD,producer,./producer)
- build-consumer:
- @echo "Building consumer..."
- $(call GO_BUILD_CMD,consumer,./consumer)
- # Run targets
- producer: build-producer
- @echo "Starting producer..."
- ./bin/producer \
- -agent=$(AGENT_ADDR) \
- -namespace=$(TOPIC_NAMESPACE) \
- -topic=$(TOPIC_NAME) \
- -partitions=$(PARTITION_COUNT) \
- -messages=$(MESSAGE_COUNT) \
- -publisher=test-producer \
- -size=1024 \
- -interval=100ms
- consumer: build-consumer
- @echo "Starting consumer..."
- ./bin/consumer \
- -agent=$(AGENT_ADDR) \
- -namespace=$(TOPIC_NAMESPACE) \
- -topic=$(TOPIC_NAME) \
- -group=$(CONSUMER_GROUP) \
- -instance=$(CONSUMER_INSTANCE) \
- -max-partitions=10 \
- -window-size=100 \
- -offset=latest \
- -show-messages=true \
- -log-progress=true
- # Run producer directly with go run
- run-producer:
- @echo "Running producer directly..."
- $(call GO_RUN_CMD,./producer, \
- -agent=$(AGENT_ADDR) \
- -namespace=$(TOPIC_NAMESPACE) \
- -topic=$(TOPIC_NAME) \
- -partitions=$(PARTITION_COUNT) \
- -messages=$(MESSAGE_COUNT) \
- -publisher=test-producer \
- -size=1024 \
- -interval=100ms)
- # Run consumer directly with go run
- run-consumer:
- @echo "Running consumer directly..."
- $(call GO_RUN_CMD,./consumer, \
- -agent=$(AGENT_ADDR) \
- -namespace=$(TOPIC_NAMESPACE) \
- -topic=$(TOPIC_NAME) \
- -group=$(CONSUMER_GROUP) \
- -instance=$(CONSUMER_INSTANCE) \
- -max-partitions=10 \
- -window-size=100 \
- -offset=latest \
- -show-messages=true \
- -log-progress=true)
- # Test scenarios
- test: test-basic
- test-basic: build
- @echo "Running basic producer/consumer test..."
- @echo "1. Starting consumer in background..."
- ./bin/consumer \
- -agent=$(AGENT_ADDR) \
- -namespace=$(TOPIC_NAMESPACE) \
- -topic=$(TOPIC_NAME) \
- -group=$(CONSUMER_GROUP) \
- -instance=$(CONSUMER_INSTANCE) \
- -offset=earliest \
- -show-messages=false \
- -log-progress=true & \
- CONSUMER_PID=$$!; \
- echo "Consumer PID: $$CONSUMER_PID"; \
- sleep 2; \
- echo "2. Starting producer..."; \
- ./bin/producer \
- -agent=$(AGENT_ADDR) \
- -namespace=$(TOPIC_NAMESPACE) \
- -topic=$(TOPIC_NAME) \
- -partitions=$(PARTITION_COUNT) \
- -messages=$(MESSAGE_COUNT) \
- -publisher=test-producer \
- -size=1024 \
- -interval=50ms; \
- echo "3. Waiting for consumer to process messages..."; \
- sleep 5; \
- echo "4. Stopping consumer..."; \
- kill $$CONSUMER_PID || true; \
- echo "Test completed!"
- test-performance: build
- @echo "Running performance test..."
- @echo "1. Starting consumer in background..."
- ./bin/consumer \
- -agent=$(AGENT_ADDR) \
- -namespace=$(TOPIC_NAMESPACE) \
- -topic=perf-test \
- -group=perf-consumer-group \
- -instance=perf-consumer-1 \
- -offset=earliest \
- -show-messages=false \
- -log-progress=true & \
- CONSUMER_PID=$$!; \
- echo "Consumer PID: $$CONSUMER_PID"; \
- sleep 2; \
- echo "2. Starting high-throughput producer..."; \
- ./bin/producer \
- -agent=$(AGENT_ADDR) \
- -namespace=$(TOPIC_NAMESPACE) \
- -topic=perf-test \
- -partitions=8 \
- -messages=1000 \
- -publisher=perf-producer \
- -size=512 \
- -interval=10ms; \
- echo "3. Waiting for consumer to process messages..."; \
- sleep 10; \
- echo "4. Stopping consumer..."; \
- kill $$CONSUMER_PID || true; \
- echo "Performance test completed!"
- test-multiple-consumers: build
- @echo "Running multiple consumers test..."
- @echo "1. Starting multiple consumers in background..."
- ./bin/consumer \
- -agent=$(AGENT_ADDR) \
- -namespace=$(TOPIC_NAMESPACE) \
- -topic=multi-test \
- -group=multi-consumer-group \
- -instance=consumer-1 \
- -offset=earliest \
- -show-messages=false \
- -log-progress=true & \
- CONSUMER1_PID=$$!; \
- ./bin/consumer \
- -agent=$(AGENT_ADDR) \
- -namespace=$(TOPIC_NAMESPACE) \
- -topic=multi-test \
- -group=multi-consumer-group \
- -instance=consumer-2 \
- -offset=earliest \
- -show-messages=false \
- -log-progress=true & \
- CONSUMER2_PID=$$!; \
- echo "Consumer PIDs: $$CONSUMER1_PID, $$CONSUMER2_PID"; \
- sleep 2; \
- echo "2. Starting producer..."; \
- ./bin/producer \
- -agent=$(AGENT_ADDR) \
- -namespace=$(TOPIC_NAMESPACE) \
- -topic=multi-test \
- -partitions=8 \
- -messages=200 \
- -publisher=multi-producer \
- -size=256 \
- -interval=50ms; \
- echo "3. Waiting for consumers to process messages..."; \
- sleep 10; \
- echo "4. Stopping consumers..."; \
- kill $$CONSUMER1_PID $$CONSUMER2_PID || true; \
- echo "Multiple consumers test completed!"
- # Clean up
- clean:
- @echo "Cleaning up..."
- rm -rf bin/
- go clean -cache
- # Help
- help:
- @echo "SeaweedFS Message Queue Test Makefile"
- @echo ""
- @echo "Usage:"
- @echo " make build - Build producer and consumer binaries"
- @echo " make producer - Run producer (builds first)"
- @echo " make consumer - Run consumer (builds first)"
- @echo " make run-producer - Run producer directly with go run"
- @echo " make run-consumer - Run consumer directly with go run"
- @echo " make test - Run basic producer/consumer test"
- @echo " make test-performance - Run performance test"
- @echo " make test-multiple-consumers - Run multiple consumers test"
- @echo " make clean - Clean up build artifacts"
- @echo ""
- @echo "Configuration (set via environment variables):"
- @echo " AGENT_ADDR=10.21.152.113:16777 - MQ agent address"
- @echo " TOPIC_NAMESPACE=test - Topic namespace"
- @echo " TOPIC_NAME=test-topic - Topic name"
- @echo " PARTITION_COUNT=4 - Number of partitions"
- @echo " MESSAGE_COUNT=100 - Number of messages to produce"
- @echo " CONSUMER_GROUP=test-consumer-group - Consumer group name"
- @echo " CONSUMER_INSTANCE=test-consumer-1 - Consumer instance ID"
- @echo ""
- @echo "Examples:"
- @echo " make producer MESSAGE_COUNT=1000 PARTITION_COUNT=8"
- @echo " make consumer CONSUMER_GROUP=my-group"
- @echo " make test AGENT_ADDR=10.21.152.113:16777 MESSAGE_COUNT=500"
|