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.domain.SimpleChatHome;
8 import de.juplo.kafka.chat.backend.persistence.StorageStrategy;
9 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
10 import org.springframework.context.annotation.Bean;
11 import org.springframework.context.annotation.Configuration;
13 import java.time.Clock;
16 @ConditionalOnProperty(
17 prefix = "chat.backend",
19 havingValue = "inmemory",
20 matchIfMissing = true)
22 public class InMemoryServicesConfiguration
26 ChatBackendProperties properties,
27 InMemoryChatHomeService chatHomeService,
28 StorageStrategy storageStrategy)
30 SimpleChatHome[] chatHomes = new SimpleChatHome[properties.getInmemory().getNumShards()];
33 .subscribe(chatRoom ->
35 int shard = chatRoom.getShard();
36 if (chatHomes[shard] == null)
37 chatHomes[shard] = new SimpleChatHome(chatHomeService, shard);
43 InMemoryChatHomeService chatHomeService(
44 ChatBackendProperties properties,
45 StorageStrategy storageStrategy)
47 return new InMemoryChatHomeService(
48 properties.getInmemory().getNumShards(),
49 properties.getInmemory().getOwnedShards(),
50 storageStrategy.read());
54 InMemoryChatRoomFactory chatRoomFactory(
55 ShardingStrategy strategy,
57 ChatBackendProperties properties)
59 return new InMemoryChatRoomFactory(
62 properties.getChatroomBufferSize());
65 @ConditionalOnProperty(
66 prefix = "chat.backend.inmemory",
67 name = "sharding-strategy",
69 matchIfMissing = true)
71 ShardingStrategy defaultShardingStrategy()
73 return chatRoomId -> 0;
76 @ConditionalOnProperty(
77 prefix = "chat.backend.inmemory",
78 name = "sharding-strategy",
79 havingValue = "kafkalike")
81 ShardingStrategy kafkalikeShardingStrategy(ChatBackendProperties properties)
83 return new KafkaLikeShardingStrategy(
84 properties.getInmemory().getNumShards());