1 package de.juplo.kafka.chat.backend.persistence.inmemory;
3 import de.juplo.kafka.chat.backend.ChatBackendProperties;
4 import de.juplo.kafka.chat.backend.api.KafkaLikeShardingStrategy;
5 import de.juplo.kafka.chat.backend.api.ShardingStrategy;
6 import de.juplo.kafka.chat.backend.domain.ChatHome;
7 import de.juplo.kafka.chat.backend.persistence.StorageStrategy;
8 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
9 import org.springframework.context.annotation.Bean;
10 import org.springframework.context.annotation.Configuration;
12 import java.time.Clock;
15 @ConditionalOnProperty(
16 prefix = "chat.backend",
18 havingValue = "inmemory",
19 matchIfMissing = true)
21 public class InMemoryServicesConfiguration
25 ChatBackendProperties properties,
26 InMemoryChatHomeService chatHomeService,
27 StorageStrategy storageStrategy)
29 ChatHome[] chatHomes = new ChatHome[properties.getInmemory().getNumShards()];
32 .subscribe(chatRoom ->
34 int shard = chatRoom.getShard();
35 if (chatHomes[shard] == null)
36 chatHomes[shard] = new ChatHome(chatHomeService, shard);
42 InMemoryChatHomeService chatHomeService(
43 ChatBackendProperties properties,
44 StorageStrategy storageStrategy)
46 return new InMemoryChatHomeService(
47 properties.getInmemory().getNumShards(),
48 properties.getInmemory().getOwnedShards(),
49 storageStrategy.read());
53 InMemoryChatRoomFactory chatRoomFactory(
54 ShardingStrategy strategy,
56 ChatBackendProperties properties)
58 return new InMemoryChatRoomFactory(
61 properties.getChatroomBufferSize());
64 @ConditionalOnProperty(
65 prefix = "chat.backend.inmemory",
66 name = "sharding-strategy",
68 matchIfMissing = true)
70 ShardingStrategy defaultShardingStrategy()
72 return chatRoomId -> 0;
75 @ConditionalOnProperty(
76 prefix = "chat.backend.inmemory",
77 name = "sharding-strategy",
78 havingValue = "kafkalike")
80 ShardingStrategy kafkalikeShardingStrategy(ChatBackendProperties properties)
82 return new KafkaLikeShardingStrategy(
83 properties.getInmemory().getNumShards());