From a82808975658223cd449cb89ebfb0577c1bbad4f Mon Sep 17 00:00:00 2001 From: Nhan Nguyen Date: Mon, 15 Jun 2026 00:20:07 +0700 Subject: [PATCH 1/3] Added feat allow user to add header to message and duplicate message --- .../kafdrop/controller/MessageController.java | 1 + .../java/kafdrop/model/CreateMessageVO.java | 5 + src/main/java/kafdrop/model/HeaderVO.java | 9 ++ .../service/KafkaHighLevelProducer.java | 7 + src/main/resources/application.yml | 3 + .../templates/message-inspector.ftlh | 131 ++++++++++++++++-- 6 files changed, 145 insertions(+), 11 deletions(-) create mode 100644 src/main/java/kafdrop/model/HeaderVO.java diff --git a/src/main/java/kafdrop/controller/MessageController.java b/src/main/java/kafdrop/controller/MessageController.java index 7872e92a..fbfb0c71 100644 --- a/src/main/java/kafdrop/controller/MessageController.java +++ b/src/main/java/kafdrop/controller/MessageController.java @@ -303,6 +303,7 @@ public String addMessage( } catch (Exception ex) { model.addAttribute("errorMessage", ex.getMessage()); } + model.addAttribute("sendEnabled", sendEnabled); return "message-inspector"; } diff --git a/src/main/java/kafdrop/model/CreateMessageVO.java b/src/main/java/kafdrop/model/CreateMessageVO.java index bf9d7211..59afab97 100644 --- a/src/main/java/kafdrop/model/CreateMessageVO.java +++ b/src/main/java/kafdrop/model/CreateMessageVO.java @@ -3,6 +3,9 @@ import lombok.Data; import lombok.RequiredArgsConstructor; +import java.util.ArrayList; +import java.util.List; + @Data @RequiredArgsConstructor public final class CreateMessageVO { @@ -14,4 +17,6 @@ public final class CreateMessageVO { private String value; private String topic; + + private List headers = new ArrayList<>(); } diff --git a/src/main/java/kafdrop/model/HeaderVO.java b/src/main/java/kafdrop/model/HeaderVO.java new file mode 100644 index 00000000..61123eb0 --- /dev/null +++ b/src/main/java/kafdrop/model/HeaderVO.java @@ -0,0 +1,9 @@ +package kafdrop.model; + +import lombok.Data; + +@Data +public class HeaderVO { + private String key; + private String value; +} diff --git a/src/main/java/kafdrop/service/KafkaHighLevelProducer.java b/src/main/java/kafdrop/service/KafkaHighLevelProducer.java index b6fdeeb6..1b355d80 100644 --- a/src/main/java/kafdrop/service/KafkaHighLevelProducer.java +++ b/src/main/java/kafdrop/service/KafkaHighLevelProducer.java @@ -52,6 +52,13 @@ public RecordMetadata publishMessage(CreateMessageVO message, Serializers serial message.getTopicPartition(), serializers.getKeySerializer().serializeMessage(message.getKey()), serializers.getValueSerializer().serializeMessage(message.getValue())); + for (var header : message.getHeaders()) { + if (header.getKey() != null && !header.getKey().isBlank()) { + final var v = header.getValue() != null ? header.getValue() : ""; + record.headers().add(header.getKey(), v.getBytes()); + } + } + Future result = kafkaProducer.send(record); try { RecordMetadata recordMetadata = result.get(); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 2833e0c5..82a1f63f 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -46,3 +46,6 @@ kafka: truststoreFile: "${KAFKA_TRUSTSTORE_FILE:kafka.truststore.jks}" propertiesFile : "${KAFKA_PROPERTIES_FILE:kafka.properties}" keystoreFile: "${KAFKA_KEYSTORE_FILE:kafka.keystore.jks}" + +message: + sendEnabled: true diff --git a/src/main/resources/templates/message-inspector.ftlh b/src/main/resources/templates/message-inspector.ftlh index 541ff338..76b0d6c1 100644 --- a/src/main/resources/templates/message-inspector.ftlh +++ b/src/main/resources/templates/message-inspector.ftlh @@ -98,11 +98,11 @@ -