首页 > 编程知识 正文

dotnet core game,dotnetcore入门

时间:2023-05-06 06:44:28 阅读:234773 作者:3425

官网地址:https://github.com/ctripcorp/apollo

官方演示环境(Demo):

106.54.227.205:8070账号/密码:apollo/admin一、创建应用

在客户端接入 Apollo 之前,先在 Apollo 管理后台(106.54.227.205:8070)创建一个 appid为【kwdfj0208】 应用,并添加配置项,如下:

二、创建 Namespace

在 Apollo 中,还可以通过建 Namespace 供应用进行关联使用。比如:有 N 个服务,每个服务有自己的配置信息,那就需要在 Apollo 中建 N 个应用,每个服务引用对应的应用配置,但有的配置可能是所有或部分服务都需要的,这时候就可以考虑创建一个公共的 Namespace 配置,需要这些配置信息的应用引用此 Namespace 即可。

通过应用右侧的 添加 Namespace 或者顶部的 管理员工具 进行 Namespace 的创建,然后在 Namespace 中添加配置项。

三、.NET Core客户端代码实现

Apollo .NET 客户端支持 .NET Framework 和 .NET Core ,这里以 .NET Core 为例来介绍,更多可参考:apollo.net 中的 Demo。

创建一个 .NET Core API 项目,添加 Com.Ctrip.Framework.Apollo.Configuration NuGet 包

在 appsettings.json 添加 Apollo 配置信息

{ "apollo": { "AppId": "kwdfj0208", // 应用id "MetaServer": "http://106.12.25.204:8080/", "Env": "DEV" }}

    3.修改 Program.cs

public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration(builder => builder .AddApollo(builder.Build().GetSection("apollo")) .AddNamespace("kwdfj.common") // 引入 TEST1.Common 命名空间 .AddDefault()) // 默认 namespace: application .UseStartup<Startup>();

以上配置如果 Default 中具有 kwdfj.Common 相同的 key,那么 Default 会覆盖掉 kwdfj.Common 中相同 key 的值。

   4.添加获取配置信息接口

public class ValuesController : Controller { private IConfiguration _configration; public ValuesController(IConfiguration configuration) { _configration = configuration; } [HttpGet] public async Task<object> Get() { await Task.CompletedTask; return new { timeout = _configration["timeout"], appkey = _configration["appkey"] }; } }

服务启动成功后,配置信息会注入到 IConfiguration 中,可以从容器中的 IConfiguration 对象获取具体配置。

   5.启动并调用接口

https://localhost:44303/api/values

{"timeout":"800","appkey":"11111"}

在之前的介绍中提到了客户端拉取到配置信息之后,会在本地文件中进行缓存,目的是在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置。经过以上测试,可以在以下目录进行查看缓存文件:

Mac/Linux: /opt/data/{appId}/config-cacheWindows: C:optdata{appId}config-cache

在缓存文件存的情况下,可以将 Apollo 服务全部 kill 进行测试,服务依然能拉起到配置信息。

Apollo 修改配置发布后是实时生效的,但有些情况下并不能反应出来,主要原因还是在代码的实现上,如果存在这样的情况,需要看看代码的具体实现。比如:配置信息赋给了静态变量、程序内部有自己的缓存策略等。

相关链接

https://blog.csdn.net/ningjiebing/article/details/90638974

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。