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" 
 |