3232import io .micrometer .core .instrument .observation .DefaultMeterObservationHandler ;
3333import io .micrometer .core .instrument .simple .SimpleMeterRegistry ;
3434import io .micrometer .core .tck .MeterRegistryAssert ;
35+ import io .micrometer .observation .Observation ;
3536import io .micrometer .observation .ObservationHandler ;
3637import io .micrometer .observation .ObservationRegistry ;
3738import io .micrometer .observation .tck .TestObservationRegistry ;
4546import io .micrometer .tracing .test .simple .SimpleSpan ;
4647import io .micrometer .tracing .test .simple .SimpleTracer ;
4748import org .apache .kafka .clients .admin .AdminClientConfig ;
49+ import org .apache .kafka .clients .consumer .Consumer ;
4850import org .apache .kafka .clients .consumer .ConsumerConfig ;
4951import org .apache .kafka .clients .consumer .ConsumerRecord ;
5052import org .apache .kafka .clients .producer .ProducerConfig ;
7476import org .springframework .kafka .core .KafkaTemplate ;
7577import org .springframework .kafka .core .ProducerFactory ;
7678import org .springframework .kafka .listener .MessageListenerContainer ;
79+ import org .springframework .kafka .listener .RecordInterceptor ;
7780import org .springframework .kafka .support .micrometer .KafkaListenerObservation .DefaultKafkaListenerObservationConvention ;
7881import org .springframework .kafka .support .micrometer .KafkaTemplateObservation .DefaultKafkaTemplateObservationConvention ;
7982import org .springframework .kafka .test .EmbeddedKafkaBroker ;
@@ -356,7 +359,7 @@ private void assertThatAdmin(Object object, KafkaAdmin admin, String brokersStri
356359 @ Test
357360 void observationRuntimeException (@ Autowired ExceptionListener listener , @ Autowired SimpleTracer tracer ,
358361 @ Autowired @ Qualifier ("throwableTemplate" ) KafkaTemplate <Integer , String > runtimeExceptionTemplate ,
359- @ Autowired KafkaListenerEndpointRegistry endpointRegistry )
362+ @ Autowired KafkaListenerEndpointRegistry endpointRegistry , @ Autowired Config config )
360363 throws ExecutionException , InterruptedException , TimeoutException {
361364
362365 runtimeExceptionTemplate .send (OBSERVATION_RUNTIME_EXCEPTION , "testRuntimeException" ).get (10 , TimeUnit .SECONDS );
@@ -372,6 +375,8 @@ void observationRuntimeException(@Autowired ExceptionListener listener, @Autowir
372375 assertThat (span .getError ().getCause ())
373376 .isInstanceOf (IllegalStateException .class )
374377 .hasMessage ("obs4 run time exception" );
378+
379+ assertThat (config .scopeInFailureReference .get ()).isNotNull ();
375380 }
376381
377382 @ Test
@@ -445,6 +450,8 @@ public static class Config {
445450
446451 KafkaAdmin mockAdmin = mock (KafkaAdmin .class );
447452
453+ AtomicReference <Observation .Scope > scopeInFailureReference = new AtomicReference <>();
454+
448455 @ Bean
449456 KafkaAdmin admin (EmbeddedKafkaBroker broker ) {
450457 String [] brokers = StringUtils .commaDelimitedListToStringArray (broker .getBrokersAsString ());
@@ -512,7 +519,7 @@ KafkaTemplate<Integer, String> reuseAdminBeanKafkaTemplate(
512519
513520 @ Bean
514521 ConcurrentKafkaListenerContainerFactory <Integer , String > kafkaListenerContainerFactory (
515- ConsumerFactory <Integer , String > cf ) {
522+ ConsumerFactory <Integer , String > cf , ObservationRegistry observationRegistry ) {
516523
517524 ConcurrentKafkaListenerContainerFactory <Integer , String > factory =
518525 new ConcurrentKafkaListenerContainerFactory <>();
@@ -522,6 +529,24 @@ ConcurrentKafkaListenerContainerFactory<Integer, String> kafkaListenerContainerF
522529 if (container .getListenerId ().equals ("obs3" )) {
523530 container .setKafkaAdmin (this .mockAdmin );
524531 }
532+ if (container .getListenerId ().equals ("obs4" )) {
533+ container .setRecordInterceptor (new RecordInterceptor <>() {
534+
535+ @ Override
536+ public ConsumerRecord <Integer , String > intercept (ConsumerRecord <Integer , String > record ,
537+ Consumer <Integer , String > consumer ) {
538+
539+ return record ;
540+ }
541+
542+ @ Override
543+ public void failure (ConsumerRecord <Integer , String > record , Exception exception ,
544+ Consumer <Integer , String > consumer ) {
545+
546+ Config .this .scopeInFailureReference .set (observationRegistry .getCurrentObservationScope ());
547+ }
548+ });
549+ }
525550 });
526551 return factory ;
527552 }
0 commit comments