class ClusterConfiguration {

    @Bean
    public ExtendedClusterImpl cluster(ClusterProperties properties, ResourceLoader resourceLoader) {<FILL_FUNCTION_BODY>}

    @Bean
    public InternalEventBus eventBus() {
        return new InternalEventBus();
    }

    @Bean
    public EventBusStorageManager eventBusStorageManager(ClusterManager clusterManager, EventBus eventBus) {
        return new EventBusStorageManager(clusterManager,
                                          eventBus,
                                          -1);
    }

    @Bean(initMethod = "startup")
    public RedisClusterManager clusterManager(ClusterProperties properties, ReactiveRedisTemplate<Object, Object> template) {
        return new RedisClusterManager(properties.getName(), properties.getId(), template);
    }

    @Bean(initMethod = "startAwait", destroyMethod = "stopAwait")
    public ScalecubeRpcManager rpcManager(ExtendedCluster cluster, ClusterProperties properties) {
        return new ScalecubeRpcManager(cluster,
                                       () -> new RSocketServiceTransport()
                                           .serverTransportFactory(RSocketServerTransportFactory.tcp(properties.getRpcPort()))
                                           .clientTransportFactory(RSocketClientTransportFactory.tcp()))
            .externalHost(properties.getRpcExternalHost())
            .externalPort(properties.getRpcExternalPort());
    }

}


        FSTMessageCodec codec = new FSTMessageCodec(() -> {
            FSTConfiguration configuration = FSTConfiguration
                .createDefaultConfiguration()
                .setForceSerializable(true);

            configuration.setClassLoader(resourceLoader.getClassLoader());
            return configuration;
        });

        ExtendedClusterImpl impl = new ExtendedClusterImpl(
            new ClusterConfig()
                .transport(conf -> conf
                    .port(properties.getPort())
                    .messageCodec(codec)
                    .transportFactory(new TcpTransportFactory()))
                .memberAlias(properties.getId())
                .externalHost(properties.getExternalHost())
                .externalPort(properties.getExternalPort())
                .membership(conf -> conf
                    .seedMembers(properties
                                     .getSeeds()
                                     .stream()
                                     .map(Address::from)
                                     .collect(Collectors.toList()))


                )

        );
        impl.startAwait();
        return impl;
    
<no_super_class>