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");

最新文章

  1. 104-switch语句读法:
  2. maven 跳过测试 打包 及上传命令
  3. Bootstrap分页插件--Bootstrap Paginator
  4. 使用apache.lang包安全简洁地操作Java时间
  5. oracle储存过程,job,视图,触发器(记性不好,写个例子自己记)
  6. Win下安装Cygwin中的SSH服务
  7. DOCKER 从入门到放弃(三)
  8. absort函数和exit函数
  9. ArcGIS API For Javascript_4.8-Symbol__SimpleLineSymbol
  10. 关于http协议的一些笔记
  11. NOI Day2线上同步赛崩盘记
  12. python学习笔记8-邮件模块
  13. 向Nexus仓库推送/使用各种组件
  14. C++虚函数、虚继承
  15. Javascript前端思维导图
  16. 长网址 短网址(http://www.zhihu.com/question/19852154?rf=21975802)
  17. centos安装oracle客户端
  18. cocos2d-x 3.2 关闭按钮点击立马销毁自己报错
  19. svn 不能校验路径“XXX”的锁;没有匹配的可用锁令牌 故障解决方法
  20. App.config的典型应用

热门文章

  1. 老猿学5G扫盲贴:3GPP规范中与计费相关的主要规范文档列表及下载链接
  2. 第10.3节 Python导入模块能否取消导入?
  3. 第15.24节 PyQt(Python+Qt)入门学习:Model/View架构中QTableView的作用及属性详解
  4. 记账本APP小升级
  5. Docker 简介-基本概念(一)
  6. 3、tensorflow变量运算,数学运算
  7. ActionResult的返回类型
  8. 补:冲刺Day2
  9. vue中的样式绑定
  10. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes