网站文章内容页keyword设置,dedecms妇科医院wap网站模板 v1.0,婚礼策划婚礼定制,网页设计用什么尺寸的画布在分布式系统开发中#xff0c;配置中心必不可少。在中通几年时间里#xff0c;为了配合大数据计算平台#xff0c;统一管理数百个微小应用#xff0c;设计了一套轻量级配置中心。星尘配置中心在其理念基础上改进#xff0c;针对中小团队而全新设计#xff01;源码#… 在分布式系统开发中配置中心必不可少。在中通几年时间里为了配合大数据计算平台统一管理数百个微小应用设计了一套轻量级配置中心。星尘配置中心在其理念基础上改进针对中小团队而全新设计源码https://github.com/NewLifeX/Stardust试用http://star.newlifex.comNuget包NewLife.Stardust、NewLife.Stardust.Extensions快速预览三个应用配置数据如下基于标签的变量引用是星尘配置中心的亮点请求接口返回数据如下配置请求时加上作用域 scopeprod不同作用域返回了不同的配置值。prod域不存在使用了_master的默认空域配置10.0.0.1。功能特点配置中心本质上就是一个名值字典在开发实践中需要解决多环境、多团队协同等问题。星尘配置中心主要功能特点如下使用简单设置名值配置后应用可通过接口获取配置NewLife组件配置系统集成支持嵌套${_teamName}即可从本应用或共享应用中获取_teamName进行替换可以灵活构建各种配置项支持共享Common应用共享给StarWebStarWeb可以直接返回Common的配置或者作为替换变量Common就是各团队统一使用的配置值一次修改多个应用生效支持忽略下划线开头的配置项仅作为变量不会返回给客户端支持跨应用引用StarWeb的conn_shop设置${_masterDb}指定引用Db应用的_master变量而无需Db共享给StarWeb只有DBA维护Db和Redis而几乎所有应用都需要用到支持多作用域Db有默认空域以及dev作用域的_master以区分生产环境和开发环境的数据库配置StarWeb应用使用时只管引用_masterdev作用域将穿透到所有被引用变量基本用法使用 HttpConfigProvider 可以直接访问星尘配置中心也可以访问阿波罗配置中心具体参考此处为语雀文档点击链接查看https://www.yuque.com/go/doc/31612474示例代码var provider new HttpConfigProvider
{Server http://star.newlifex.com:6600,//Server http://localhost:6600,AppId StarWeb
};var str provider[test1];
Assert.NotEmpty(str);var keys provider.Keys.ToArray();
Assert.NotNull(keys);var model provider.LoadModel2();
Assert.NotNull(model);
Assert.NotEmpty(model.Test);
Assert.Equal(str, model.Test);
Assert.NotEmpty(model.Shop);
Assert.NotEmpty(model.Title);
Assert.Equal(NewLife开发团队, model.Title);var model2 new Model2();
provider.Bind(model2);
Assert.Equal(str, model2.Test);
Assert.NotEmpty(model.Shop);
Assert.Equal(NewLife开发团队, model.Title);provider.LoadAll();
实例化HttpConfigProvider时需要指定星尘服务端地址和应用AppId还需要密钥Secret如果服务端设置了应用密钥。得到provider以后就可以直接访问配置数据了例如 provider[test1]。也可以通过Load方法把配置数据设置到一个对象的属性上去。还可以通过Bind方法把配置数据绑定到一个对象的属性上这个办法还具备自动刷新功能也就是说服务器配置数据变化以后HttpConfigProvider内部将会更新该对象的属性。这里的更新可能因为网络原因最多有一分钟的延迟。Bind的用法非常适用于配置对象。集成用法星尘配置中心的客户端集成在星尘组件包 NewLife.Stardust 中直接从nuget引用。实例化星尘工厂后即可得到配置提供者对象var star new StarFactory(null, StarWeb, null);services.AddSingleton(star);
services.AddSingleton(star.Tracer);
services.AddSingleton(star.Config);// 数据库连接配置
DAL.GetConfig star.Config.GetConfig;
这的star.Config就是上面“基本用法”中的IConfigProvider实际类型HttpConfigProvider。借助星尘工厂统一了应用的身份验证。同时这里不需要自己配置星尘服务端地址它将会自动读取配置文件appsettings.json的StarServer配置项或者跟服务器节点本机的StarAgent沟通得到。DAL是数据中间件的数据层GetConfig直接建立跟星尘配置中心的绑定关系此举让XCode能够跟星尘紧密结合在一起。这里把star.Config注入到ioc中业务代码使用的时候就可以通过IConfigProvider得到实际配置对象。消费使用例子如下JobHost解析使用了IConfigProviderSyncOrder等作业类内部也可以解析使用。using System;
using System.Threading;
using System.Threading.Tasks;
using AntJob;
using AntJob.Providers;
using NewLife;
using NewLife.Configuration;
using NewLife.Log;
using NewLife.Model;
using OrderCenter.Api.JobServices;namespace OrderCenter.Tasks.JobServices
{public class JobHost : BackgroundService{private readonly IServiceProvider _provider;private readonly IConfigProvider _config;private readonly OrderStatService _stat;private Scheduler _scheduler;public JobHost(IServiceProvider provider, IConfigProvider config, OrderStatService service){_provider provider;_config config;_stat service;}protected override Task ExecuteAsync(CancellationToken stoppingToken){var set AntSetting.Current;var services ObjectContainer.Current;var server _config[antServer];if (!server.IsNullOrEmpty()){set.Server server;set.Save();}// 实例化调度器var sc new Scheduler{Tracer DefaultTracer.Instance,// 使用分布式调度引擎替换默认的本地文件调度Provider new NetworkJobProvider{Server set.Server,AppID set.AppID,Secret set.Secret,Debug false}};// 订单冷热同步。热表订单同步到冷表sc.AddHandlerSyncOrder();sc.AddHandlerSyncOrder2();// 启动调度引擎调度器内部多线程处理sc.Start();_scheduler sc;return Task.CompletedTask;}public override Task StopAsync(CancellationToken cancellationToken){_scheduler.TryDispose();_scheduler null;return Task.CompletedTask;}}
}
.NET Core 高度集成用法在Asp.NET Core应用中可以整体引入星尘全家桶除了配置中心还有监控中心、注册中心服务注册与发现、日志中心等。只需要在Startup的ConfigureServices中使用一句services.AddStardust(StarWeb) 这里不需要自己配置星尘服务端地址和密钥它将会自动读取配置文件appsettings.json的StarServer配置项或者跟服务器节点本机的StarAgent沟通得到。using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using NewLife.Cube;
using Stardust.Data;
using Stardust.Server.Services;
using XCode.DataAccessLayer;namespace Stardust.Web
{public class Startup{public Startup(IConfiguration configuration) Configuration configuration;public IConfiguration Configuration { get; }public void ConfigureServices(IServiceCollection services){var star services.AddStardust(StarWeb);services.AddControllersWithViews();services.AddCube();}public void Configure(IApplicationBuilder app, IWebHostEnvironment env){// 使用Cube前添加自己的管道if (env.IsDevelopment())app.UseDeveloperExceptionPage();elseapp.UseExceptionHandler(/CubeHome/Error);app.UseCube(env);app.UseEndpoints(endpoints {endpoints.MapControllerRoute(name: default,pattern: {controllerCubeHome}/{actionIndex}/{id?});});// 发布服务到星尘注册中心需要指定服务名app.RegisterService(StarWeb);}}
}
配置管理应用引入NewLife.Stardust包接入星尘配置中心以后配置中心将会自动创建应用要求StarServer下的config/starserver.config的AutoRegister设置为true。应用配置进入星尘StarWeb管理平台例如http://star.newlifex.com/配置中心子系统应用配置页面即可管理各个应用的配置数据。每个应用的基本信息包括启用。是否禁止该应用使用配置中心版本。该应用正在使用的配置版本号客户端请求配置数据时如果传入相同版本号则认为配置没有改变不返回任何配置数据意为让客户端继续使用上一次的配置数据下一版本。下一个未发布版本该应用的配置数据有改变但是还没有发布此时下一版本号会比当前版本号要大同时“发布”按钮显示出来定时发布。设置定时发布下一个版本的时间到期后自动发布下一版本可被依赖。指定应用是否可以被其它应用依赖例如项目组内部的工控配置可以写到一起设置为可被依赖然后其它项目即可直接依赖该应用从而得到该应用的全部配置数据融入自有配置数据依赖应用。当前应用依赖其它的应用全局。全局应用意为该应用的配置数据融入所有其它应用的配置数据中在其它应用拉取时一起返回管理配置从应用配置找到应用点击“配置”进入管理页面。在这里可以添加配置数据也可以修改维护配置。不用担心对线上系统造成影响因为在发布修改之前所做修改并不会被各个应用客户端拉取。配置名称以下划线开头时仅用于内嵌的变量引用并不会返回给客户端。这是星尘配置中心的一个特色。在星尘配置中心某个应用之下配置名称并不是唯一的配置名称加上作用域Scope才是唯一。也就是说同样一个配置中不同的作用域可以有不同的值。作用域Scope常用于dev/test/prod/uat等环境区分。如果某个配置数据作用域为空表示该配置的默认值当该配置名称没有任何作用域配置客户端请求时使用空域配置数据。如果没有空域配置客户端指定的配置域又找不到时配置中心将会给客户端返回错误信息。作用域不仅仅适用于某个应用而是能够穿透到内嵌应用。因此conn_shop配置值是${_masterDb};databaseshop引用了Db应用的_master而Db里面配置了多个_master分别对应不同的配置值。conn_shop得以在不同环境下使用不同的数据库连接字符串。全局应用每个公司可以指定一个应用作为全局应用存放所有应用都需要使用的配置数据例如CompanyName新生命。各个应用就不再需要配置CompanyName而应用端可以直接使用。当然系统并没有限制只能使用一个全局应用设置多个全局应用也是可以的只是可能带来管理上的麻烦。演示系统中的Common就是全局应用它内部的_teamName可被所有应用直接使用而无需建立依赖关系。需要注意的是_teamName以下划线开头表示内部配置仅用于变量引用不会作为配置数据返回给应用客户端。同名配置优先级应用内该Scope配置应用内空域配置依赖应用全局应用依赖应用考虑到团队内部的公共应用需要可以设置某个应用为团队内部的公共应用。团队内部各个应用可以直接引用该依赖引用。一个公司可能有多个开发团队不同的团队有自己的公共应用。演示系统中的Db就是可被依赖的应用然后StarWeb应用依赖了该Db应用多选。因此StarWeb自动“获得”了Db的所有配置项这里只有_master。需要注意的是_master以下划线开头表示内部配置仅用于变量引用不会作为配置数据返回给应用客户端。同名配置优先级应用内该Scope配置应用内空域配置依赖应用全局应用变量引用基于公共配置抽象的需要星尘配置中心支持变量引用。允许一个配置数据引用其它配置内容。配置标签以美元符号和大括号组成例如conn_shop的配置值${_masterDb};databaseshop表示引用Db应用的_master配置值然后在后面加上一些自己的内容。这里的例子跟依赖应用有点关系如果建立了依赖引用那么这里可以直接写${_master};databaseshop。因此依赖引用不是必须的可以通过Db的形式强行引用任意其它应用的配置数据。但是强烈不建议这么做因为这样子会让被引用者根本分不清楚自己被谁引用了从而带来管理风险。同名配置优先级应用内该Scope配置应用内空域配置依赖应用全局应用版本发布新增或者修改配置数据以后配置数据版本号将会变成当前应用版本号加一表示这是未发布新版本。此时在应用内部或者外面列表页点击“发布”都将会把当前版本号改为下一版本号通知客户端该应用的配置数据有改变。作用域规则配置客户端默认并不会向配置中心提交scope而是由配置中心根据来源IP地址计算得到scope。当IP满足某个匹配条件时产生某个结果scope等于指定值。同步阿波罗配置星尘配置中心支持从阿波罗同步指定应用同步配置数据。阿波罗接入并不需要密钥验证所以……总结星尘配置中心客户端可以紧密结合星尘通知紧密结合XCode数据中间件、魔方快速开发平台、蚂蚁调度系统、Redis消息队列等等NewLife系列产品组件。同时该客户端还可以对接阿波罗配置中心使用方法不变。星尘配置中心为了简化使用提升用户体验不再设置命名空间等概念。建议普通用户直接给各个应用设置配置数据即可少数高级用户可以使用全局、依赖、引用等高级特性。