22
22
import static org .mockito .BDDMockito .given ;
23
23
import static org .mockito .Mockito .mock ;
24
24
25
+ import java .util .ArrayList ;
25
26
import java .util .List ;
26
27
import java .util .Map ;
27
28
import java .util .concurrent .CountDownLatch ;
28
29
import java .util .concurrent .TimeUnit ;
29
30
import java .util .concurrent .atomic .AtomicBoolean ;
30
31
import java .util .concurrent .atomic .AtomicReference ;
32
+ import java .util .stream .Collectors ;
31
33
32
34
import org .apache .kafka .clients .consumer .Consumer ;
33
35
import org .apache .kafka .clients .consumer .ConsumerConfig ;
37
39
import org .junit .jupiter .api .BeforeAll ;
38
40
import org .junit .jupiter .api .Test ;
39
41
40
- import org .springframework .kafka .core .ConsumerFactory ;
42
+ import org .springframework .context .ApplicationEvent ;
43
+ import org .springframework .context .ApplicationEventPublisher ;
41
44
import org .springframework .kafka .core .DefaultKafkaConsumerFactory ;
42
45
import org .springframework .kafka .core .DefaultKafkaProducerFactory ;
43
46
import org .springframework .kafka .core .KafkaOperations ;
44
47
import org .springframework .kafka .core .KafkaTemplate ;
48
+ import org .springframework .kafka .event .ConsumerPausedEvent ;
49
+ import org .springframework .kafka .event .ConsumerResumedEvent ;
45
50
import org .springframework .kafka .event .ConsumerStoppedEvent ;
46
51
import org .springframework .kafka .support .TopicPartitionOffset ;
47
52
import org .springframework .kafka .test .EmbeddedKafkaBroker ;
@@ -96,8 +101,8 @@ public void testRetriesAndDlt() throws InterruptedException {
96
101
throw new ListenerExecutionFailedException ("fail for retry batch" );
97
102
});
98
103
99
- KafkaMessageListenerContainer <Integer , String > container =
100
- new KafkaMessageListenerContainer <>(cf , containerProps );
104
+ ConcurrentMessageListenerContainer <Integer , String > container =
105
+ new ConcurrentMessageListenerContainer <>(cf , containerProps );
101
106
container .setBeanName ("retryBatch" );
102
107
final CountDownLatch recoverLatch = new CountDownLatch (1 );
103
108
final AtomicReference <String > failedGroupId = new AtomicReference <>();
@@ -118,10 +123,21 @@ public void accept(ConsumerRecord<?, ?> record, Exception exception) {
118
123
FallbackBatchErrorHandler errorHandler = new FallbackBatchErrorHandler (new FixedBackOff (0L , 3 ), recoverer );
119
124
container .setBatchErrorHandler (errorHandler );
120
125
final CountDownLatch stopLatch = new CountDownLatch (1 );
121
- container .setApplicationEventPublisher (e -> {
122
- if (e instanceof ConsumerStoppedEvent ) {
123
- stopLatch .countDown ();
126
+ List <ApplicationEvent > events = new ArrayList <>();
127
+ container .setApplicationEventPublisher (new ApplicationEventPublisher () {
128
+
129
+ @ Override
130
+ public void publishEvent (ApplicationEvent e ) {
131
+ events .add (e );
132
+ if (e instanceof ConsumerStoppedEvent ) {
133
+ stopLatch .countDown ();
134
+ }
135
+ }
136
+
137
+ @ Override
138
+ public void publishEvent (Object event ) {
124
139
}
140
+
125
141
});
126
142
container .start ();
127
143
@@ -142,6 +158,14 @@ public void accept(ConsumerRecord<?, ?> record, Exception exception) {
142
158
pf .destroy ();
143
159
consumer .close ();
144
160
assertThat (stopLatch .await (10 , TimeUnit .SECONDS )).isTrue ();
161
+ assertThat (events .stream ()
162
+ .filter (ev -> ev instanceof ConsumerPausedEvent )
163
+ .collect (Collectors .toList ()))
164
+ .hasSize (1 );
165
+ assertThat (events .stream ()
166
+ .filter (ev -> ev instanceof ConsumerResumedEvent )
167
+ .collect (Collectors .toList ()))
168
+ .hasSize (1 );
145
169
}
146
170
147
171
@ SuppressWarnings ("deprecation" )
0 commit comments