X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fchat%2Fbackend%2Fpersistence%2Fkafka%2FKafkaChatRoomService.java;h=f036efe135071da00e057e4ce73c3f7d68652b8c;hb=394aa7848abcfc7b4510cd2688c00fce01b3c225;hp=37c4e50d2f0274be2d349fc90e1155f38cb7c3b2;hpb=43b2f8b3bdac4c19035fc1c39ba9e0bddaa4a4a0;p=demos%2Fkafka%2Fchat diff --git a/src/main/java/de/juplo/kafka/chat/backend/persistence/kafka/KafkaChatRoomService.java b/src/main/java/de/juplo/kafka/chat/backend/persistence/kafka/KafkaChatRoomService.java index 37c4e50d..f036efe1 100644 --- a/src/main/java/de/juplo/kafka/chat/backend/persistence/kafka/KafkaChatRoomService.java +++ b/src/main/java/de/juplo/kafka/chat/backend/persistence/kafka/KafkaChatRoomService.java @@ -5,6 +5,7 @@ import de.juplo.kafka.chat.backend.domain.Message; import de.juplo.kafka.chat.backend.domain.MessageMutationException; import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.producer.Producer; +import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.common.TopicPartition; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -21,8 +22,6 @@ public class KafkaChatRoomService implements ChatRoomService private final LinkedHashMap messages = new LinkedHashMap<>(); - private volatile MessageHandlingStrategy strategy; - public KafkaChatRoomService( Producer producer, @@ -30,7 +29,6 @@ public class KafkaChatRoomService implements ChatRoomService { this.producer = producer; this.tp = tp; - this.strategy = new ChatroomInactiveMessageHandlingStrategy(tp); } @@ -40,7 +38,36 @@ public class KafkaChatRoomService implements ChatRoomService LocalDateTime timestamp, String text) { - return strategy.handleMessage(key, timestamp, text); + return Mono.create(sink -> + { + ProducerRecord record = + new ProducerRecord<>( + tp.topic(), + tp.partition(), + timestamp.toEpochSecond(zoneOffset), + chatRoomId.toString(), + MessageTo.of(key.getUsername(), key.getMessageId(), text)); + + producer.send(record, ((metadata, exception) -> + { + if (metadata != null) + { + // On successful send + { + // Emit new message + Message message = new Message(key, metadata.offset(), timestamp, text); + kafkaChatRoomService.addMessage(message); + } + + sink.success(); + } + else + { + // On send-failure + sink.error(exception); + } + })); + }); } /**