X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fchat%2Fbackend%2Fpersistence%2Fkafka%2FChatRoomChannel.java;h=b08a50d2a6c78a3309e3bb347005af065ec9ff7e;hb=716ffa6a7665496e614ce6a1671c8e49c562a4c2;hp=da04554ea876fb3c77ad8931085b667b7c4e2fb7;hpb=8dc6050f497c742e19cf5363214cf452f31f0017;p=demos%2Fkafka%2Fchat diff --git a/src/main/java/de/juplo/kafka/chat/backend/persistence/kafka/ChatRoomChannel.java b/src/main/java/de/juplo/kafka/chat/backend/persistence/kafka/ChatRoomChannel.java index da04554e..b08a50d2 100644 --- a/src/main/java/de/juplo/kafka/chat/backend/persistence/kafka/ChatRoomChannel.java +++ b/src/main/java/de/juplo/kafka/chat/backend/persistence/kafka/ChatRoomChannel.java @@ -23,9 +23,10 @@ import java.util.UUID; public class ChatRoomChannel implements Runnable { private final String topic; - private final Consumer consumer; - private final Producer producer; - private final ChatRoomFactory chatRoomFactory; + private final Consumer consumer; + private final Producer producer; + private final ShardingStrategy shardingStrategy; + private final ChatMessageChannel chatMessageChannel; private boolean running; @@ -41,10 +42,10 @@ public class ChatRoomChannel implements Runnable { try { - ConsumerRecords records = consumer.poll(Duration.ofMinutes(5)); + ConsumerRecords records = consumer.poll(Duration.ofMinutes(5)); log.info("Fetched {} messages", records.count()); - for (ConsumerRecord record : records) + for (ConsumerRecord record : records) { UUID id = record.value().getId(); String name = record.value().getName(); @@ -60,17 +61,27 @@ public class ChatRoomChannel implements Runnable } } + void createChatRoom() + { + log.info("Creating ChatRoom with buffer-size {}", bufferSize); + KafkaChatRoomService service = new KafkaChatRoomService(chatMessageChannel, id); + int shard = shardingStrategy.selectShard(id); + ChatRoom chatRoom = new ChatRoom(id, name, shard, clock, service, bufferSize); + chatMessageChannel.putChatRoom(chatRoom); + } + Mono sendCreateChatRoomRequest( UUID chatRoomId, String name) { - ChatRoomTo chatRoomTo = ChatRoomTo.of(chatRoomId, name); + int shard = this.shardingStrategy.selectShard(chatRoomId); + ChatRoomTo chatRoomTo = ChatRoomTo.of(chatRoomId, name, shard); return Mono.create(sink -> { - ProducerRecord record = + ProducerRecord record = new ProducerRecord<>( topic, - chatRoomId.toString(), + shard, chatRoomTo); producer.send(record, ((metadata, exception) ->