一旦使用者无法反序列化请求,kafka就不会使用来自生产者的下一个请求。生产者可以发送请求,但由于异常消费者不能接收请求。我希望kafka能够使用请求,即使有异常,也不应阻止后续请求。
@Component
public class PrometheusConsumer extends AbstractVerticle {
private KafkaConsumer<String, String> prometheusConsumer;
private final KafkaConfig kafkaConfig;
public PrometheusConsumer(KafkaConfig kafkaConfig) {
this.kafkaConfig = kafkaConfig;
}
@Override
public void start(Promise<Void> startPromise) {
configureConsumer();
this.prometheusConsumer.handler(record -> {
Dummy dummy = Json.decodeValue(record.value(), Dummy.class);
System.out.println("Processing key=" + record.key() + ",value=" + record.value() +
",partition=" + record.partition() + ",offset=" + record.offset());
}).exceptionHandler(ex->{
System.out.println("EXCEPTION HANDLED IN CONSUMER: "+ex.getMessage());
});
//
}
private void configureConsumer() {
this.prometheusConsumer = KafkaConsumer.create(vertx, kafkaConfig.getConsumerConfig());
prometheusConsumer.subscribe("dummy-topic", ar -> {
if (ar.succeeded()) {
System.out.println("dummy-topic consumer subscribed");
}
});
this.vertx.exceptionHandler(handler->{
System.err.println("EXCEPTION OCCURED WHILE CONSUMING");
});
}
}
router.route("/").handler(StaticHandler.create().setCachingEnabled(false));
try {
router.get("/info").handler(routingContext -> {
Person p = new Person();
p.setName("test");
p.setEmail("test@gmail.com");
ObjectMapper mapper = new ObjectMapper();
String s = null;
try {
s = mapper.writeValueAsString(p);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
KafkaProducerRecord<String, JsonObject> producerRecord = KafkaProducerRecord.create("dummy-topic", new JsonObject(s));
producer.send(producerRecord, handler -> {
System.out.println("Producer sent the request");
if (handler.succeeded()) {
System.out.println("kafka success");
}
});
kafkaCounter.inc();
routingContext.response().end("aaa");
});