io.smallrye.reactive.messaging.kafka.ReceivedKafkaMessage Maven / Gradle / Ivy
package io.smallrye.reactive.messaging.kafka;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.function.Supplier;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import io.vertx.reactivex.kafka.client.consumer.KafkaConsumer;
import io.vertx.reactivex.kafka.client.consumer.KafkaConsumerRecord;
public class ReceivedKafkaMessage implements KafkaMessage {
private final KafkaConsumerRecord record;
private final KafkaConsumer consumer;
private final MessageHeaders headers;
public ReceivedKafkaMessage(KafkaConsumer consumer, KafkaConsumerRecord record) {
this.record = Objects.requireNonNull(record);
this.consumer = Objects.requireNonNull(consumer);
this.headers = new MessageHeaders(record.getDelegate().record().headers());
}
@Override
public T getPayload() {
return record.value();
}
public K getKey() {
return record.key();
}
public String getTopic() {
return record.topic();
}
public Integer getPartition() {
return record.partition();
}
@Override
public Long getTimestamp() {
return record.timestamp();
}
@Override
public MessageHeaders getHeaders() {
return headers;
}
@Override
public Supplier> getAckSupplier() {
return this::ack;
}
public ConsumerRecord unwrap() {
return record.getDelegate().record();
}
@Override
public CompletionStage ack() {
consumer.commit();
return CompletableFuture.completedFuture(null);
}
}