提交 812ef596 编写于 作者: J junxiong

#428 add orchestrator provider

上级 d5196703
package io.shardingjdbc.orchestration.api;
import io.shardingjdbc.orchestration.api.config.OrchestratorConfiguration;
import io.shardingjdbc.orchestration.internal.OrchestratorImpl;
import io.shardingjdbc.orchestration.reg.base.*;
import io.shardingjdbc.orchestration.reg.zookeeper.ZookeeperConfiguration;
import io.shardingjdbc.orchestration.reg.zookeeper.ZookeeperRegistryCenter;
import io.shardingjdbc.orchestration.reg.zookeeper.config.ZkConfigurationService;
import io.shardingjdbc.orchestration.reg.zookeeper.state.datasource.ZkDataSourceService;
import io.shardingjdbc.orchestration.reg.zookeeper.state.instance.ZkInstanceStateService;
import io.shardingjdbc.orchestration.reg.zookeeper.ZookeeperOrchestratorFactory;
import java.util.ServiceLoader;
/**
* Orchestrator builder
......@@ -20,6 +16,7 @@ public class OrchestratorBuilder {
/**
* New orchestrator builder
*
* @return OrchestratorBuilder
*/
public static OrchestratorBuilder newBuilder() {
......@@ -28,6 +25,7 @@ public class OrchestratorBuilder {
/**
* with orchestorator configuration
*
* @param configuration orchestrator configuration
* @return self
*/
......@@ -42,20 +40,14 @@ public class OrchestratorBuilder {
* @return orchestrator instance
*/
public Orchestrator build() {
// TODO build different kind of orchestrator
String name = configuration.getName();
boolean overwrite = configuration.isOverwrite();
CoordinatorRegistryCenter registryCenter = setupRegistryCenterIfNeeded(configuration);
ConfigurationService configurationService = new ZkConfigurationService(name, overwrite, registryCenter);
InstanceStateService instanceStateService = new ZkInstanceStateService(name, configurationService, registryCenter);
DataSourceService dataSourceService = new ZkDataSourceService(name, configurationService, registryCenter);
return new OrchestratorImpl(configurationService, instanceStateService, dataSourceService);
String type = configuration.getRegistryCenter().get("type");
ServiceLoader<OrchestratorFactory> serviceLoader = ServiceLoader.load(OrchestratorFactory.class);
for (OrchestratorFactory orchestratorFactory : serviceLoader) {
if (orchestratorFactory.target(type)) {
return orchestratorFactory.create(configuration);
}
}
return new ZookeeperOrchestratorFactory().create(configuration);
}
private CoordinatorRegistryCenter setupRegistryCenterIfNeeded(OrchestratorConfiguration config) {
ZookeeperConfiguration zkConfig = ZookeeperConfiguration.from(config);
CoordinatorRegistryCenter registryCenter = new ZookeeperRegistryCenter(zkConfig);
registryCenter.init();
return registryCenter;
}
}
package io.shardingjdbc.orchestration.api;
import io.shardingjdbc.orchestration.api.Orchestrator;
import io.shardingjdbc.orchestration.api.config.OrchestratorConfiguration;
/**
* Orchestrator factory
*
* @author junxiong
*/
public interface OrchestratorFactory {
boolean target(String type);
Orchestrator create(OrchestratorConfiguration configuration);
}
......@@ -6,6 +6,7 @@ import io.shardingjdbc.core.jdbc.core.datasource.MasterSlaveDataSource;
import io.shardingjdbc.core.jdbc.core.datasource.ShardingDataSource;
import io.shardingjdbc.core.rule.MasterSlaveRule;
import io.shardingjdbc.orchestration.reg.base.ConfigurationService;
import io.shardingjdbc.orchestration.reg.base.CoordinatorRegistryCenter;
import javax.sql.DataSource;
import java.util.Map;
......@@ -15,6 +16,12 @@ import java.util.Properties;
* @author junxiong
*/
public class EtcdConfigurationService implements ConfigurationService {
private CoordinatorRegistryCenter registryCenter;
public EtcdConfigurationService(CoordinatorRegistryCenter registryCenter) {
this.registryCenter = registryCenter;
}
@Override
public void persistShardingConfiguration(Map<String, DataSource> dataSourceMap, ShardingRuleConfiguration shardingRuleConfig, Properties props, ShardingDataSource shardingDataSource) {
......
package io.shardingjdbc.orchestration.reg.etcd;
import io.shardingjdbc.core.jdbc.core.datasource.MasterSlaveDataSource;
import io.shardingjdbc.orchestration.reg.base.CoordinatorRegistryCenter;
import io.shardingjdbc.orchestration.reg.base.DataSourceService;
/**
* @author junxiong
*/
public class EtcdDataSourceService implements DataSourceService {
private CoordinatorRegistryCenter registryCenter;
public EtcdDataSourceService(CoordinatorRegistryCenter registryCenter) {
this.registryCenter = registryCenter;
}
@Override
public void persistDataSourcesNodeOnline(MasterSlaveDataSource masterSlaveDataSource) {
......
......@@ -2,12 +2,19 @@ package io.shardingjdbc.orchestration.reg.etcd;
import io.shardingjdbc.core.jdbc.core.datasource.MasterSlaveDataSource;
import io.shardingjdbc.core.jdbc.core.datasource.ShardingDataSource;
import io.shardingjdbc.orchestration.reg.base.CoordinatorRegistryCenter;
import io.shardingjdbc.orchestration.reg.base.InstanceStateService;
/**
* @author junxiong
*/
public class EtcdInstanceStateService implements InstanceStateService {
private CoordinatorRegistryCenter registryCenter;
public EtcdInstanceStateService(CoordinatorRegistryCenter registryCenter) {
this.registryCenter = registryCenter;
}
@Override
public void persistShardingInstanceOnline(ShardingDataSource shardingDataSource) {
......
package io.shardingjdbc.orchestration.reg.etcd;
import io.shardingjdbc.orchestration.api.Orchestrator;
import io.shardingjdbc.orchestration.api.OrchestratorFactory;
import io.shardingjdbc.orchestration.api.config.OrchestratorConfiguration;
import io.shardingjdbc.orchestration.internal.OrchestratorImpl;
import io.shardingjdbc.orchestration.reg.base.ConfigurationService;
import io.shardingjdbc.orchestration.reg.base.CoordinatorRegistryCenter;
import io.shardingjdbc.orchestration.reg.base.DataSourceService;
import io.shardingjdbc.orchestration.reg.base.InstanceStateService;
/**
* Etcd Orchestrator factory
*
* @author junxiong
*/
public class EtcdOrchestratorFactory implements OrchestratorFactory {
@Override
public boolean target(String type) {
return "etcd".equalsIgnoreCase(type);
}
@Override
public Orchestrator create(OrchestratorConfiguration configuration) {
CoordinatorRegistryCenter registryCenter = setUpCoordinatorRegistryCenter(configuration);
ConfigurationService configurationService = new EtcdConfigurationService(registryCenter);
DataSourceService dataSourceService = new EtcdDataSourceService(registryCenter);
InstanceStateService instanceStateService = new EtcdInstanceStateService(registryCenter);
return new OrchestratorImpl(configurationService, instanceStateService, dataSourceService);
}
private CoordinatorRegistryCenter setUpCoordinatorRegistryCenter(OrchestratorConfiguration configuration) {
return new EtcdRegistryCenter(EtcdConfiguration.builder()
.namespace(configuration.getRegistryCenter().get("namespace"))
.serverLists(configuration.getRegistryCenter().get("server-lists"))
.build());
}
}
package io.shardingjdbc.orchestration.reg.zookeeper;
import io.shardingjdbc.orchestration.api.OrchestratorFactory;
import io.shardingjdbc.orchestration.api.Orchestrator;
import io.shardingjdbc.orchestration.api.config.OrchestratorConfiguration;
import io.shardingjdbc.orchestration.internal.OrchestratorImpl;
import io.shardingjdbc.orchestration.reg.base.ConfigurationService;
import io.shardingjdbc.orchestration.reg.base.CoordinatorRegistryCenter;
import io.shardingjdbc.orchestration.reg.base.DataSourceService;
import io.shardingjdbc.orchestration.reg.base.InstanceStateService;
import io.shardingjdbc.orchestration.reg.zookeeper.config.ZkConfigurationService;
import io.shardingjdbc.orchestration.reg.zookeeper.state.datasource.ZkDataSourceService;
import io.shardingjdbc.orchestration.reg.zookeeper.state.instance.ZkInstanceStateService;
/**
* @author junxiong
*/
public class ZookeeperOrchestratorFactory implements OrchestratorFactory {
@Override
public boolean target(String type) {
return "zk".equalsIgnoreCase(type);
}
/**
* build specific orchestrator instance
*
* @return orchestrator instance
*/
@Override
public Orchestrator create(OrchestratorConfiguration configuration) {
String name = configuration.getName();
boolean overwrite = configuration.isOverwrite();
CoordinatorRegistryCenter registryCenter = setupRegistryCenterIfNeeded(configuration);
ConfigurationService configurationService = new ZkConfigurationService(name, overwrite, registryCenter);
InstanceStateService instanceStateService = new ZkInstanceStateService(name, configurationService, registryCenter);
DataSourceService dataSourceService = new ZkDataSourceService(name, configurationService, registryCenter);
return new OrchestratorImpl(configurationService, instanceStateService, dataSourceService);
}
private CoordinatorRegistryCenter setupRegistryCenterIfNeeded(OrchestratorConfiguration config) {
ZookeeperConfiguration zkConfig = ZookeeperConfiguration.from(config);
CoordinatorRegistryCenter registryCenter = new ZookeeperRegistryCenter(zkConfig);
registryCenter.init();
return registryCenter;
}
}
io.shardingjdbc.orchestration.reg.etcd.EtcdOrchestratorFactory
io.shardingjdbc.orchestration.reg.zookeeper.ZookeeperOrchestratorFactory
\ No newline at end of file
package io.shardingjdbc.orchestration.reg;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
OrchestratorBuilderIntegrateTest.class
})
public class AllRegTests {
}
package io.shardingjdbc.orchestration.reg;
import com.google.common.collect.Maps;
import io.shardingjdbc.orchestration.api.Orchestrator;
import io.shardingjdbc.orchestration.api.OrchestratorBuilder;
import io.shardingjdbc.orchestration.api.config.OrchestratorConfiguration;
import io.shardingjdbc.orchestration.util.EmbedTestingServer;
import org.junit.BeforeClass;
import org.junit.Test;
import java.util.Map;
import static org.junit.Assert.assertNotNull;
public class OrchestratorBuilderIntegrateTest {
@BeforeClass
public static void before() {
EmbedTestingServer.start();
}
@Test
public void testBuildZookeeperOrchestor() {
Map<String, String> registryCenter = Maps.newHashMap();
registryCenter.put("type", "zk");
registryCenter.put("namespace", "test");
registryCenter.put("server-lists", "localhost:3181");
OrchestratorConfiguration configuration = new OrchestratorConfiguration("test", false, registryCenter);
Orchestrator orchestrator = OrchestratorBuilder.newBuilder().with(configuration).build();
assertNotNull(orchestrator);
}
@Test
public void testBuildEtcdOrchestor() {
Map<String, String> registryCenter = Maps.newHashMap();
registryCenter.put("type", "etcd");
registryCenter.put("namespace", "test");
registryCenter.put("server-lists", "http://localhost:2379");
OrchestratorConfiguration configuration = new OrchestratorConfiguration("test", false, registryCenter);
Orchestrator orchestrator = OrchestratorBuilder.newBuilder().with(configuration).build();
assertNotNull(orchestrator);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册