Fix spring-kafka-2.7 latest dep tests (#9921)
This commit is contained in:
parent
f6b63dac7b
commit
e148b84536
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
package io.opentelemetry.testing;
|
package io.opentelemetry.testing;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
import org.apache.kafka.clients.admin.NewTopic;
|
import org.apache.kafka.clients.admin.NewTopic;
|
||||||
import org.springframework.beans.factory.ObjectProvider;
|
import org.springframework.beans.factory.ObjectProvider;
|
||||||
import org.springframework.boot.SpringBootConfiguration;
|
import org.springframework.boot.SpringBootConfiguration;
|
||||||
|
@ -15,6 +16,8 @@ import org.springframework.kafka.config.ContainerCustomizer;
|
||||||
import org.springframework.kafka.config.TopicBuilder;
|
import org.springframework.kafka.config.TopicBuilder;
|
||||||
import org.springframework.kafka.core.ConsumerFactory;
|
import org.springframework.kafka.core.ConsumerFactory;
|
||||||
import org.springframework.kafka.listener.ConcurrentMessageListenerContainer;
|
import org.springframework.kafka.listener.ConcurrentMessageListenerContainer;
|
||||||
|
import org.springframework.util.backoff.BackOff;
|
||||||
|
import org.springframework.util.backoff.FixedBackOff;
|
||||||
|
|
||||||
@SpringBootConfiguration
|
@SpringBootConfiguration
|
||||||
@EnableAutoConfiguration
|
@EnableAutoConfiguration
|
||||||
|
@ -50,7 +53,13 @@ public class ConsumerConfig {
|
||||||
ConcurrentKafkaListenerContainerFactory<String, String> factory =
|
ConcurrentKafkaListenerContainerFactory<String, String> factory =
|
||||||
new ConcurrentKafkaListenerContainerFactory<>();
|
new ConcurrentKafkaListenerContainerFactory<>();
|
||||||
// do not retry failed records
|
// do not retry failed records
|
||||||
factory.setBatchErrorHandler(new DoNothingBatchErrorHandler());
|
try {
|
||||||
|
Class.forName("org.springframework.kafka.listener.BatchErrorHandler");
|
||||||
|
ErrorHandlerSetter.setBatchErrorHandler(factory);
|
||||||
|
} catch (ClassNotFoundException ignored) {
|
||||||
|
// org.springframework.kafka.listener.BatchErrorHandler is missing in latest
|
||||||
|
setCommonErrorHandler(factory);
|
||||||
|
}
|
||||||
factory.setConsumerFactory(consumerFactory);
|
factory.setConsumerFactory(consumerFactory);
|
||||||
factory.setBatchListener(true);
|
factory.setBatchListener(true);
|
||||||
factory.setAutoStartup(true);
|
factory.setAutoStartup(true);
|
||||||
|
@ -68,11 +77,34 @@ public class ConsumerConfig {
|
||||||
ConcurrentKafkaListenerContainerFactory<String, String> factory =
|
ConcurrentKafkaListenerContainerFactory<String, String> factory =
|
||||||
new ConcurrentKafkaListenerContainerFactory<>();
|
new ConcurrentKafkaListenerContainerFactory<>();
|
||||||
// do not retry failed records
|
// do not retry failed records
|
||||||
factory.setErrorHandler(new DoNothingErrorHandler());
|
try {
|
||||||
|
Class.forName("org.springframework.kafka.listener.ErrorHandler");
|
||||||
|
ErrorHandlerSetter.setErrorHandler(factory);
|
||||||
|
} catch (ClassNotFoundException ignored) {
|
||||||
|
// org.springframework.kafka.listener.ErrorHandler is missing in latest
|
||||||
|
setCommonErrorHandler(factory);
|
||||||
|
}
|
||||||
factory.setConsumerFactory(consumerFactory);
|
factory.setConsumerFactory(consumerFactory);
|
||||||
factory.setBatchListener(false);
|
factory.setBatchListener(false);
|
||||||
factory.setAutoStartup(true);
|
factory.setAutoStartup(true);
|
||||||
customizerProvider.ifAvailable(factory::setContainerCustomizer);
|
customizerProvider.ifAvailable(factory::setContainerCustomizer);
|
||||||
return factory;
|
return factory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void setCommonErrorHandler(
|
||||||
|
ConcurrentKafkaListenerContainerFactory<String, String> factory) {
|
||||||
|
try {
|
||||||
|
Class<?> handlerClass =
|
||||||
|
Class.forName("org.springframework.kafka.listener.CommonErrorHandler");
|
||||||
|
Class<?> defaultHandlerClass =
|
||||||
|
Class.forName("org.springframework.kafka.listener.DefaultErrorHandler");
|
||||||
|
BackOff backOff = new FixedBackOff(0, 0);
|
||||||
|
Object handler =
|
||||||
|
defaultHandlerClass.getDeclaredConstructor(BackOff.class).newInstance(backOff);
|
||||||
|
Method method = factory.getClass().getMethod("setCommonErrorHandler", handlerClass);
|
||||||
|
method.invoke(factory, handler);
|
||||||
|
} catch (Exception exception) {
|
||||||
|
// ignored
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.testing;
|
||||||
|
|
||||||
|
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
|
||||||
|
|
||||||
|
// Base classes for error handlers are missing in the latest version. Setter methods were extracted
|
||||||
|
// in ConsumerConfig to avoid verifier attempting to load these classes.
|
||||||
|
class ErrorHandlerSetter {
|
||||||
|
|
||||||
|
private ErrorHandlerSetter() {}
|
||||||
|
|
||||||
|
static void setBatchErrorHandler(
|
||||||
|
ConcurrentKafkaListenerContainerFactory<String, String> factory) {
|
||||||
|
factory.setBatchErrorHandler(new DoNothingBatchErrorHandler());
|
||||||
|
}
|
||||||
|
|
||||||
|
static void setErrorHandler(ConcurrentKafkaListenerContainerFactory<String, String> factory) {
|
||||||
|
factory.setErrorHandler(new DoNothingErrorHandler());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue