Makefile 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. # SeaweedFS Message Queue Test Makefile
  2. # Build configuration
  3. GO_BUILD_CMD=go build -o bin/$(1) $(2)
  4. GO_RUN_CMD=go run $(1) $(2)
  5. # Default values
  6. AGENT_ADDR?=localhost:16777
  7. TOPIC_NAMESPACE?=test
  8. TOPIC_NAME?=test-topic
  9. PARTITION_COUNT?=4
  10. MESSAGE_COUNT?=100
  11. CONSUMER_GROUP?=test-consumer-group
  12. CONSUMER_INSTANCE?=test-consumer-1
  13. # Create bin directory
  14. $(shell mkdir -p bin)
  15. .PHONY: all build clean producer consumer test help
  16. all: build
  17. # Build targets
  18. build: build-producer build-consumer
  19. build-producer:
  20. @echo "Building producer..."
  21. $(call GO_BUILD_CMD,producer,./producer)
  22. build-consumer:
  23. @echo "Building consumer..."
  24. $(call GO_BUILD_CMD,consumer,./consumer)
  25. # Run targets
  26. producer: build-producer
  27. @echo "Starting producer..."
  28. ./bin/producer \
  29. -agent=$(AGENT_ADDR) \
  30. -namespace=$(TOPIC_NAMESPACE) \
  31. -topic=$(TOPIC_NAME) \
  32. -partitions=$(PARTITION_COUNT) \
  33. -messages=$(MESSAGE_COUNT) \
  34. -publisher=test-producer \
  35. -size=1024 \
  36. -interval=100ms
  37. consumer: build-consumer
  38. @echo "Starting consumer..."
  39. ./bin/consumer \
  40. -agent=$(AGENT_ADDR) \
  41. -namespace=$(TOPIC_NAMESPACE) \
  42. -topic=$(TOPIC_NAME) \
  43. -group=$(CONSUMER_GROUP) \
  44. -instance=$(CONSUMER_INSTANCE) \
  45. -max-partitions=10 \
  46. -window-size=100 \
  47. -offset=latest \
  48. -show-messages=true \
  49. -log-progress=true
  50. # Run producer directly with go run
  51. run-producer:
  52. @echo "Running producer directly..."
  53. $(call GO_RUN_CMD,./producer, \
  54. -agent=$(AGENT_ADDR) \
  55. -namespace=$(TOPIC_NAMESPACE) \
  56. -topic=$(TOPIC_NAME) \
  57. -partitions=$(PARTITION_COUNT) \
  58. -messages=$(MESSAGE_COUNT) \
  59. -publisher=test-producer \
  60. -size=1024 \
  61. -interval=100ms)
  62. # Run consumer directly with go run
  63. run-consumer:
  64. @echo "Running consumer directly..."
  65. $(call GO_RUN_CMD,./consumer, \
  66. -agent=$(AGENT_ADDR) \
  67. -namespace=$(TOPIC_NAMESPACE) \
  68. -topic=$(TOPIC_NAME) \
  69. -group=$(CONSUMER_GROUP) \
  70. -instance=$(CONSUMER_INSTANCE) \
  71. -max-partitions=10 \
  72. -window-size=100 \
  73. -offset=latest \
  74. -show-messages=true \
  75. -log-progress=true)
  76. # Test scenarios
  77. test: test-basic
  78. test-basic: build
  79. @echo "Running basic producer/consumer test..."
  80. @echo "1. Starting consumer in background..."
  81. ./bin/consumer \
  82. -agent=$(AGENT_ADDR) \
  83. -namespace=$(TOPIC_NAMESPACE) \
  84. -topic=$(TOPIC_NAME) \
  85. -group=$(CONSUMER_GROUP) \
  86. -instance=$(CONSUMER_INSTANCE) \
  87. -offset=earliest \
  88. -show-messages=false \
  89. -log-progress=true & \
  90. CONSUMER_PID=$$!; \
  91. echo "Consumer PID: $$CONSUMER_PID"; \
  92. sleep 2; \
  93. echo "2. Starting producer..."; \
  94. ./bin/producer \
  95. -agent=$(AGENT_ADDR) \
  96. -namespace=$(TOPIC_NAMESPACE) \
  97. -topic=$(TOPIC_NAME) \
  98. -partitions=$(PARTITION_COUNT) \
  99. -messages=$(MESSAGE_COUNT) \
  100. -publisher=test-producer \
  101. -size=1024 \
  102. -interval=50ms; \
  103. echo "3. Waiting for consumer to process messages..."; \
  104. sleep 5; \
  105. echo "4. Stopping consumer..."; \
  106. kill $$CONSUMER_PID || true; \
  107. echo "Test completed!"
  108. test-performance: build
  109. @echo "Running performance test..."
  110. @echo "1. Starting consumer in background..."
  111. ./bin/consumer \
  112. -agent=$(AGENT_ADDR) \
  113. -namespace=$(TOPIC_NAMESPACE) \
  114. -topic=perf-test \
  115. -group=perf-consumer-group \
  116. -instance=perf-consumer-1 \
  117. -offset=earliest \
  118. -show-messages=false \
  119. -log-progress=true & \
  120. CONSUMER_PID=$$!; \
  121. echo "Consumer PID: $$CONSUMER_PID"; \
  122. sleep 2; \
  123. echo "2. Starting high-throughput producer..."; \
  124. ./bin/producer \
  125. -agent=$(AGENT_ADDR) \
  126. -namespace=$(TOPIC_NAMESPACE) \
  127. -topic=perf-test \
  128. -partitions=8 \
  129. -messages=1000 \
  130. -publisher=perf-producer \
  131. -size=512 \
  132. -interval=10ms; \
  133. echo "3. Waiting for consumer to process messages..."; \
  134. sleep 10; \
  135. echo "4. Stopping consumer..."; \
  136. kill $$CONSUMER_PID || true; \
  137. echo "Performance test completed!"
  138. test-multiple-consumers: build
  139. @echo "Running multiple consumers test..."
  140. @echo "1. Starting multiple consumers in background..."
  141. ./bin/consumer \
  142. -agent=$(AGENT_ADDR) \
  143. -namespace=$(TOPIC_NAMESPACE) \
  144. -topic=multi-test \
  145. -group=multi-consumer-group \
  146. -instance=consumer-1 \
  147. -offset=earliest \
  148. -show-messages=false \
  149. -log-progress=true & \
  150. CONSUMER1_PID=$$!; \
  151. ./bin/consumer \
  152. -agent=$(AGENT_ADDR) \
  153. -namespace=$(TOPIC_NAMESPACE) \
  154. -topic=multi-test \
  155. -group=multi-consumer-group \
  156. -instance=consumer-2 \
  157. -offset=earliest \
  158. -show-messages=false \
  159. -log-progress=true & \
  160. CONSUMER2_PID=$$!; \
  161. echo "Consumer PIDs: $$CONSUMER1_PID, $$CONSUMER2_PID"; \
  162. sleep 2; \
  163. echo "2. Starting producer..."; \
  164. ./bin/producer \
  165. -agent=$(AGENT_ADDR) \
  166. -namespace=$(TOPIC_NAMESPACE) \
  167. -topic=multi-test \
  168. -partitions=8 \
  169. -messages=200 \
  170. -publisher=multi-producer \
  171. -size=256 \
  172. -interval=50ms; \
  173. echo "3. Waiting for consumers to process messages..."; \
  174. sleep 10; \
  175. echo "4. Stopping consumers..."; \
  176. kill $$CONSUMER1_PID $$CONSUMER2_PID || true; \
  177. echo "Multiple consumers test completed!"
  178. # Clean up
  179. clean:
  180. @echo "Cleaning up..."
  181. rm -rf bin/
  182. go clean -cache
  183. # Help
  184. help:
  185. @echo "SeaweedFS Message Queue Test Makefile"
  186. @echo ""
  187. @echo "Usage:"
  188. @echo " make build - Build producer and consumer binaries"
  189. @echo " make producer - Run producer (builds first)"
  190. @echo " make consumer - Run consumer (builds first)"
  191. @echo " make run-producer - Run producer directly with go run"
  192. @echo " make run-consumer - Run consumer directly with go run"
  193. @echo " make test - Run basic producer/consumer test"
  194. @echo " make test-performance - Run performance test"
  195. @echo " make test-multiple-consumers - Run multiple consumers test"
  196. @echo " make clean - Clean up build artifacts"
  197. @echo ""
  198. @echo "Configuration (set via environment variables):"
  199. @echo " AGENT_ADDR=10.21.152.113:16777 - MQ agent address"
  200. @echo " TOPIC_NAMESPACE=test - Topic namespace"
  201. @echo " TOPIC_NAME=test-topic - Topic name"
  202. @echo " PARTITION_COUNT=4 - Number of partitions"
  203. @echo " MESSAGE_COUNT=100 - Number of messages to produce"
  204. @echo " CONSUMER_GROUP=test-consumer-group - Consumer group name"
  205. @echo " CONSUMER_INSTANCE=test-consumer-1 - Consumer instance ID"
  206. @echo ""
  207. @echo "Examples:"
  208. @echo " make producer MESSAGE_COUNT=1000 PARTITION_COUNT=8"
  209. @echo " make consumer CONSUMER_GROUP=my-group"
  210. @echo " make test AGENT_ADDR=10.21.152.113:16777 MESSAGE_COUNT=500"