Demo代码已提交到gitee,感兴趣的更有可以直接克隆使用,地址:https://gitee.com/shanfeng1000/dotnetcore-demo/tree/master/Zookeeper
.net core要使用Zookeeper,我们还是推荐使用ZooKeeperNetEx这个插件,先在nuget中搜索安装ZooKeeperNetEx,然后可以在Startup类中直接使用ZooKeeperNetEx连接Zookeeper获取数据,也可以使用前面章节中介绍的ZookeeperHelper辅助类来操作,本文也是以这个Zookeeper辅助类来作为工具,将Zookeeper作为一个配置源,从而将它集成到.net core的Configuration-option配置中。
博主使用的是.net core2.2的版本,不过对2.*和3.*区别不大。
首先贴出简单的项目文件结构:
其中,Configurations目录下的一系列Zookeeper开头的文件是集成Zookeeper所需的类,下面单独介绍,首先从我们前面的文章中得到ZookeeperHelper这个辅助类:Zookeeper基础教程(四):C#连接使用Zookeeper
ZookeeperConfigurationExtensions是一个拓展类,最终使用的是这个类的拓展方法去集成Zookeeper到Configuration配置源中
public static class ZookeeperConfigurationExtensions { /// <summary> /// 添加Zookeeper配置 /// </summary> /// <param name="builder"></param> /// <param name="configure"></param> public static IConfigurationBuilder AddZookeeper(this IConfigurationBuilder builder, Action<ZookeeperOptions> configure) { var options = new ZookeeperOptions(); configure?.Invoke(options); return builder.AddZookeeper(options); } /// <summary> /// 添加Zookeeper配置 /// </summary> /// <param name="builder"></param> /// <param name="zookeeperOptions"></param> public static IConfigurationBuilder AddZookeeper(this IConfigurationBuilder builder, ZookeeperOptions zookeeperOptions) { ZookeeperConfigurationSource zookeeperConfigurationSource = new ZookeeperConfigurationSource(zookeeperOptions); builder.Add(zookeeperConfigurationSource); return builder; } /// <summary> /// 添加Zookeeper配置 /// </summary> /// <param name="builder"></param> /// <param name="configure"></param> /// <returns></returns> public static IHostBuilder UseZookeeper(this IHostBuilder builder, Action<ZookeeperOptions> configure) { var options = new ZookeeperOptions(); configure?.Invoke(options); return builder.UseZookeeper(options); } /// <summary> /// 添加Zookeeper配置 /// </summary> /// <param name="builder"></param> /// <param name="zookeeperOptions"></param> /// <returns></returns> public static IHostBuilder UseZookeeper(this IHostBuilder builder, ZookeeperOptions zookeeperOptions) { return builder.ConfigureAppConfiguration((_, cbuilder) => cbuilder.AddZookeeper(zookeeperOptions)); } }