基础设施层-Adnc.Infr.Consul
Adnc.Infr.Consul 主要提供服务自动注册/发现以及获取配置。
项目结构
Configuration
配置中心相关共功能,主要有两个关键类
1、ConsulConfigurationProvider.cs,继承自Microsoft.Extensions.Configuration.ConfigurationProvider。
2、ConsulConfigurationSource.cs 实现了Microsoft.Extensions.Configuration.IConfigurationSource。
有了这个两个类,就相当于新增了一个consul配置源
我们在启动项目中的program.cs文件中把consul配置源添加进去,这样我们在configuration中就可以读取到配置了。
ConsulConfigurationProvider.cs 文件中ListenToConfigurationChanges方法负责监听consul配置的变化,如果有更新,就会更新configuration。
实现原理,当你通过url(http://你的consul地址/v1/kv/配置节点)获取到配置,配置中有一个index字段,如果你把index字段值加到url后面
(http://你的consul地址/v1/kv/配置节点?recurse=true&index=47837),HTTP 请求会一直阻塞,直到下一次配置变更(或 HttpClient 超时)
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureHostConfiguration(configuration =>
{
configuration.AddCommandLine(args);
})
.ConfigureAppConfiguration((context, cb) =>
{
var env = context.HostingEnvironment;
if (env.IsProduction() || env.IsStaging())
{
var configuration = cb.Build();
//从consul配置中心读取配置
var consulOption = configuration.GetSection("Consul").Get<ConsulOption>();
cb.AddConsul(new[] { consulOption.ConsulUrl }, consulOption.ConsulKeyPath);
}
cb.AddJsonFile("autofac.json", optional: true);
})
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}) }
Registration
提供服务自动注册,该文件夹只有一个文件RegistrationExtension.cs
RegistrationExtension.cs 是一个IApplicationBuilder扩展类。
public static class RegistrationExtension
{
public static void RegisterToConsul(this IApplicationBuilder app, ConsulOption consulOption)
{
//业务代码
}
}
在startup.cs文件中的Configure方法里最后调用,这样就可以把服务启动时注册到consul了。
app.RegisterToConsul(Configuration.GetSection("Consul").Get<ConsulOption>());
Consul 节点配置如下:
"Consul": {
//Consul Client 地址
"ConsulUrl": "http://127.0.0.1:8550",
//Key路径
"ConsulKeyPath": "adnc/test/sys/appsettings",
//当前服务名称,可以多个实例共享
"ServiceName": "andc-api-sys",
//当前服务地址
"ServiceUrl": "",
//服务tag
"ServerTags": ["urlprefix-/sys"],
//健康检查的地址,当前服务公布出来的一个api接口
"HealthCheckUrl": "sys/health-24b01005-a76a-4b3b-8fb1-5e0f2e9564fb",
//心跳间隔
"HealthCheckIntervalInSecond": 10,
//是否docker部署服务
"IsDocker": true
}
服务注册提供了3种方式
方式1、docker容器方式启动服务自动注册
第一步需要Consul节点的IsDocker配置为true;
第二步启动容器时配置一个环境变量
docker run --name adnc-api-sys-9010 -d -p 9010:80 --env DOCKER_LISTEN_HOSTANDPORT=http://172.16.0.4:9010 adnc-api-sys
方式2、在Consul节点配置ServiceUrl节点
方式3、在Consul节点不配置ServiceUrl节点,程序会自动获取服务器ip与监听地址。
Consumer
封装了一个静态类用于服务发现,服务发现实现的比较简单,我会继续完善。
var address = await ServiceConsumer.GetServicesAsync("http://172.16.0.4:8560", "andc-api-sys");
最新文章
- 104-switch语句读法:
- maven 跳过测试 打包 及上传命令
- Bootstrap分页插件--Bootstrap Paginator
- 使用apache.lang包安全简洁地操作Java时间
- oracle储存过程,job,视图,触发器(记性不好,写个例子自己记)
- Win下安装Cygwin中的SSH服务
- DOCKER 从入门到放弃(三)
- absort函数和exit函数
- ArcGIS API For Javascript_4.8-Symbol__SimpleLineSymbol
- 关于http协议的一些笔记
- NOI Day2线上同步赛崩盘记
- python学习笔记8-邮件模块
- 向Nexus仓库推送/使用各种组件
- C++虚函数、虚继承
- Javascript前端思维导图
- 长网址 短网址(http://www.zhihu.com/question/19852154?rf=21975802)
- centos安装oracle客户端
- cocos2d-x 3.2 关闭按钮点击立马销毁自己报错
- svn 不能校验路径“XXX”的锁;没有匹配的可用锁令牌 故障解决方法
- App.config的典型应用
热门文章
- 老猿学5G扫盲贴:3GPP规范中与计费相关的主要规范文档列表及下载链接
- 第10.3节 Python导入模块能否取消导入?
- 第15.24节 PyQt(Python+Qt)入门学习:Model/View架构中QTableView的作用及属性详解
- 记账本APP小升级
- Docker 简介-基本概念(一)
- 3、tensorflow变量运算,数学运算
- ActionResult的返回类型
- 补:冲刺Day2
- vue中的样式绑定
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes