- storageStrategy
- .read()
- .subscribe(chatRoom ->
- {
- int shard = shardingStrategy.selectShard(chatRoom.getId());
- if (chatHomes[shard] == null)
- chatHomes[shard] = new SimpleChatHome(chatHomeService, shard);
- });
- return new ShardedChatHome(chatHomes, shardingStrategy);
- }
-
- @Bean
- InMemoryChatHomeService chatHomeService(
- ChatBackendProperties properties,
- ShardingStrategy shardingStrategy,
- StorageStrategy storageStrategy)
- {
- ShardingStrategyType sharding =
- properties.getInmemory().getShardingStrategy();
- int numShards = sharding == ShardingStrategyType.none
- ? 1
- : properties.getInmemory().getNumShards();
- int[] ownedShards = sharding == ShardingStrategyType.none
- ? new int[] { 0 }
- : properties.getInmemory().getOwnedShards();
- return new InMemoryChatHomeService(
- shardingStrategy,
- numShards,
- ownedShards,
- storageStrategy.read());
- }
-
- @Bean
- InMemoryChatRoomFactory chatRoomFactory(
- ShardingStrategy strategy,
- Clock clock,
- ChatBackendProperties properties)
- {
- return new InMemoryChatRoomFactory(
- strategy,
- clock,
- properties.getChatroomBufferSize());
+ IntStream
+ .of(properties.getInmemory().getOwnedShards())
+ .forEach(shard -> chatHomes[shard] = new SimpleChatHome(
+ shard,
+ storageStrategy,
+ clock,
+ properties.getChatroomBufferSize()));
+ ShardingStrategy strategy = new KafkaLikeShardingStrategy(numShards);
+ return new ShardedChatHome(chatHomes, strategy);