Vertx Kafka消费者异常处理问题

时间:2020-11-08 17:03:53

标签: apache-kafka vert.x

一旦使用者无法反序列化请求,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");
            });

0 个答案:

没有答案