You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
228 lines
6.2 KiB
228 lines
6.2 KiB
# 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"
|