ShardingSphere实现本地注册中心,动态刷新actualDataNodes

ShardingSphere实现本地注册中心,动态刷新actualDataNodes

看过ShardingSphere4.0.0-RC1实现动态刷新actualDataNodes,不使用zookeeper等第三方注册中心这篇文章,但是发现其可操作性还是写的太差,很多还需要自己琢磨,故此写下这篇文章记录自己的琢磨过程

坑1–RegistryCenter 这个类在哪儿

需要引入sharding的服务编排核心jar包,举例:gradle

compile group: 'org.apache.shardingsphere', name: 'sharding-orchestration-core', version: '4.0.1'

坑2–OrchestrationShardingDataSourceFactory怎么也没有

接着引包

compile group: 'org.apache.shardingsphere', name: 'sharding-jdbc-orchestration-spring-namespace', version: '4.0.1'

工程代码

关于sharding SPI方面的说明请自行查看官方文档

步骤1

  • 在resources/META-INF/services下建立文件org.apache.shardingsphere.orchestration.reg.api.RegistryCenter
  • 建立类com.changan.carbond.shardingjdbc.LocalRegistryCenter
  • 文件中的内容 com.xstudio.shardingjdbc.LocalRegistryCenter和上述类保持一致【SPI注册】

步骤2–LocalRegistryCenter

public class LocalRegistryCenter implements RegistryCenter {
   
   
    public static Map<String, DataChangedEventListener> listeners = new ConcurrentHashMap<>();

    private RegistryCenterConfiguration config;
	
    private Properties properties;
    /**
	 * public 是为了在重置节点的时候减少去重新读配置
	 */
    public static Map<String, String> values = new ConcurrentHashMap<>();

    @Override
    public void init
提供的引用内容中未提及ShardingSphere 5.4.1版本动态刷新的相关内容,无法根据引用准确给出该版本动态刷新的方法和解决方案。不过,一般来说,ShardingSphere动态刷新配置可能涉及到以下通用思路: 在ShardingSphere中,动态刷新配置通常与配置中心相关。可以借助Zookeeper、Etcd等作为配置中心,当配置发生变化时,ShardingSphere可以感知到这些变化并进行动态刷新。以下是一个简单的伪代码示例,模拟动态刷新配置的过程: ```java import org.apache.shardingsphere.driver.api.ShardingSphereDataSourceFactory; import org.apache.shardingsphere.infra.config.mode.ModeConfiguration; import org.apache.shardingsphere.infra.yaml.config.pojo.mode.YamlModeConfiguration; import org.apache.shardingsphere.infra.yaml.config.swapper.mode.ModeConfigurationYamlSwapper; import org.apache.shardingsphere.yaml.config.swapper.YamlDataSourceConfigurationSwapper; import javax.sql.DataSource; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import java.util.Properties; // 初始化数据源 public class ShardingSphereDynamicRefreshExample { public static void main(String[] args) throws SQLException { // 数据源配置 Map<String, DataSource> dataSourceMap = new HashMap<>(); // 这里添加具体的数据源配置 // dataSourceMap.put("ds0", createDataSource("jdbc:mysql://localhost:3306/db0")); // dataSourceMap.put("ds1", createDataSource("jdbc:mysql://localhost:3306/db1")); // 规则配置 // 这里添加具体的规则配置 // Collection<RuleConfiguration> ruleConfigs = new ArrayList<>(); // ruleConfigs.add(createShardingRuleConfiguration()); // 模式配置 YamlModeConfiguration yamlModeConfig = new YamlModeConfiguration(); yamlModeConfig.setName("Cluster"); yamlModeConfig.setRepository(new YamlRepositoryConfiguration("Zookeeper", new Properties() {{ setProperty("server-lists", "localhost:2181"); setProperty("namespace", "shardingsphere"); }})); ModeConfiguration modeConfig = new ModeConfigurationYamlSwapper().swapToObject(yamlModeConfig); // 创建ShardingSphere数据源 DataSource dataSource = ShardingSphereDataSourceFactory.createDataSource(dataSourceMap, null, modeConfig, new Properties()); // 模拟动态刷新配置 // 当配置中心的配置发生变化时,ShardingSphere会自动感知并刷新 // 这里不需要额外的代码来处理刷新ShardingSphere内部会处理 } // 这里可以添加创建数据源和规则配置的方法 // private static DataSource createDataSource(String url) { // HikariDataSource result = new HikariDataSource(); // result.setJdbcUrl(url); // result.setUsername("root"); // result.setPassword("root"); // return result; // } // private static ShardingRuleConfiguration createShardingRuleConfiguration() { // ShardingRuleConfiguration result = new ShardingRuleConfiguration(); // // 这里添加具体的分片规则配置 // return result; // } } ```
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值