package de.juplo.kafka.chat.backend.persistence.inmemory;
import de.juplo.kafka.chat.backend.ChatBackendProperties;
-import de.juplo.kafka.chat.backend.api.KafkaLikeShardingStrategy;
-import de.juplo.kafka.chat.backend.api.ShardingStrategy;
+import de.juplo.kafka.chat.backend.ChatBackendProperties.ShardingStrategyType;
+import de.juplo.kafka.chat.backend.persistence.KafkaLikeShardingStrategy;
+import de.juplo.kafka.chat.backend.domain.ShardingStrategy;
+import de.juplo.kafka.chat.backend.domain.ChatHome;
import de.juplo.kafka.chat.backend.persistence.StorageStrategy;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
@Configuration
public class InMemoryServicesConfiguration
{
+ @Bean
+ ChatHome chatHome(InMemoryChatHomeService chatHomeService)
+ {
+ return new ChatHome(chatHomeService);
+ }
+
@Bean
InMemoryChatHomeService chatHomeService(
ChatBackendProperties properties,
StorageStrategy storageStrategy)
{
+ ShardingStrategyType sharding =
+ properties.getInmemory().getShardingStrategy();
+
+ int numShards;
+ int[] ownedShards;
+ ShardingStrategy shardingStrategy;
+
+ switch (sharding)
+ {
+ case none:
+ numShards = 1;
+ ownedShards = new int[] { 0 };
+ shardingStrategy = id -> 0;
+ break;
+ case kafkalike:
+ numShards = properties.getInmemory().getNumShards();
+ ownedShards = properties.getInmemory().getOwnedShards();
+ shardingStrategy = new KafkaLikeShardingStrategy(numShards);
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown sharding strategy: " + sharding);
+ }
+
return new InMemoryChatHomeService(
- properties.getInmemory().getNumShards(),
- properties.getInmemory().getOwnedShards(),
+ numShards,
+ ownedShards,
+ shardingStrategy,
storageStrategy.read());
}
- @Bean
- InMemoryChatHomeFactory chatHomeFactory(InMemoryChatHomeService service)
- {
- return new InMemoryChatHomeFactory(service);
- }
-
@Bean
InMemoryChatRoomFactory chatRoomFactory(
+ InMemoryChatHomeService service,
ShardingStrategy strategy,
Clock clock,
ChatBackendProperties properties)
{
return new InMemoryChatRoomFactory(
+ service,
strategy,
clock,
properties.getChatroomBufferSize());