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