@@ -705,6 +705,13 @@ void setTcpNoDelay(String input) throws Exception {
705705 converter = Converters .GreaterThanOrEqualToZeroIntegerTypeConverter .class )
706706 private long pmessages ;
707707
708+ @ CommandLine .Option (
709+ names = {"--cmessages" , "-D" },
710+ description = "consumer message count, default is 0 (no limit)" ,
711+ defaultValue = "0" ,
712+ converter = Converters .GreaterThanOrEqualToZeroIntegerTypeConverter .class )
713+ private long cmessages ;
714+
708715 private MetricsCollector metricsCollector ;
709716 private PerformanceMetrics performanceMetrics ;
710717 private List <Monitoring > monitorings ;
@@ -1094,10 +1101,12 @@ public Integer call() throws Exception {
10941101
10951102 CompletionHandler completionHandler ;
10961103 ConcurrentMap <String , Integer > completionReasons = new ConcurrentHashMap <>();
1097- if (isRunTimeLimited () || this .pmessages > 0 ) {
1104+ if (isRunTimeLimited () || this .pmessages > 0 || this .cmessages > 0 ) {
1105+ int countLimit = this .pmessages > 0 ? this .producers : 0 ;
1106+ countLimit += this .cmessages > 0 ? this .consumers : 0 ;
10981107 completionHandler =
10991108 new CompletionHandler .DefaultCompletionHandler (
1100- this .time , this . producers , completionReasons );
1109+ this .time , countLimit , completionReasons );
11011110 } else {
11021111 completionHandler = new CompletionHandler .NoLimitCompletionHandler (completionReasons );
11031112 }
@@ -1319,6 +1328,20 @@ public Integer call() throws Exception {
13191328 .builder ();
13201329 }
13211330
1331+ java .util .function .Consumer <MessageHandler .Context > messageReceivedCallback ;
1332+ if (this .cmessages > 0 ) {
1333+ AtomicLong messageCount = new AtomicLong (0 );
1334+ messageReceivedCallback =
1335+ ctx -> {
1336+ if (messageCount .incrementAndGet () == this .cmessages ) {
1337+ completionHandler .countDown ("Consumer reached message limit" );
1338+ ctx .consumer ().close ();
1339+ }
1340+ };
1341+ } else {
1342+ messageReceivedCallback = ctx -> {};
1343+ }
1344+
13221345 Runnable latencyWorker = Utils .latencyWorker (this .consumerLatency );
13231346 consumerBuilder =
13241347 consumerBuilder .messageHandler (
@@ -1333,6 +1356,7 @@ public Integer call() throws Exception {
13331356 // tool
13341357 }
13351358 metrics .offset (context .offset ());
1359+ messageReceivedCallback .accept (context );
13361360 latencyWorker .run ();
13371361 });
13381362
0 commit comments