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

基础设施层-Adnc.Infr.Consul的更多相关文章

  1. DDD领域驱动设计之领域基础设施层

    1.DDD领域驱动设计实践篇之如何提取模型 2.DDD领域驱动设计之聚合.实体.值对象 其实这里说的基础设施层只是领域层的一些接口和基类而已,没有其他的如日子工具等代码,仅仅是为了说明领域层的一些基础 ...

  2. DDD~基础设施层~续

    回到目录 在之前写的DDD~基础设施层文章中,提到了UnitOfWork,它里面有一些方法,但经过项目证明,不应该有Save和IsExplicitSubmit,而这个工作单元只起到了数据上下文统一的作 ...

  3. FAQ:仓储实现为什么在基础设施层?

    FAQ:仓储实现为什么在基础设施层? 目录 问答部分参考文章 问答部分返回目录 问: 仓储实现为什么在基础设施层? 答: 领域模型包含三种元素:实体.值对象和服务,这三种元素都可以以某种形式使用仓储, ...

  4. ABP入门教程7 - 基础设施层更新数据库

    点这里进入ABP入门教程目录 设置数据库 在基础设施层(即JD.CRS.EntityFrameworkCore)打开数据库环境设置 JD.CRS.EntityFrameworkCore/EntityF ...

  5. ABP 基础设施层——集成 Entity Framework

    本文翻译自ABP的官方教程<EntityFramework Integration>,地址为:http://aspnetboilerplate.com/Pages/Documents/En ...

  6. ABP 基础设施层——集成 NHibernate

    本文翻译自ABP的官方教程<NHibernate Integration>,地址为:http://aspnetboilerplate.com/Pages/Documents/NHibern ...

  7. 一个轻量级的.Net Core微服务快速开发的轮子

    前言     Adnc是一个轻量级的.Net Core微服务快速开发框架,同时也可以应用于单体架构系统的开发.框架基于JWT认证授权.集成了一系列微服务配套组件,代码简洁.易上手.学习成本低.开箱即用 ...

  8. Adnc如何本地调试 - 一个轻量级的.Net Core微服务开发框架

    前言     Adnc是一个轻量级的.Net Core微服务开发框架,同样适用于单体架构系统的开发.     如果只是想本地调试,只需要安装必备软件,必备软件除开发工具外,其它软件建议大家都使用`do ...

  9. ABP理论学习之N层架构

    返回总目录 自从写这个系列博客之后,发现很多园友还是希望有个直接运行的demo,其实在github上就有官方的demo,我直接把这demo的链接放到这里吧,另外,我分析,这些找不到demo的同学,很可 ...

随机推荐

  1. 第二十二章、 Model/View便利类树型部件QTreeWidget

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 树部件(Tree Widget)是Qt Designer中 Item Widgets(It ...

  2. PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的按钮改变缺省文字的方法

    在Qt Designer中可以预先定义标准按钮,相关支持的标准按钮请见<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButton ...

  3. PyQt(Python+Qt)学习随笔:复选框checkBox的tristate属性

    在Qt Designer中,tristate属性是复选框checkBox相比较于QAbstractButton多出来的唯一属性. tristate属性表示复选框是三种状态还是两种状态,如果trista ...

  4. CSMA系列区别比较:p-pCSMA;CSMA/CA;CSMA/CD

    CSMA系列小结 CSMA,又称载波侦听多路访问协议.在计算机网络课程中,其一共有四个基础协议与两个实际应用(分别是802.11和802.3) 忙 空闲 传输冲突 应用 1-p CSMA 持续侦听,等 ...

  5. Python 反序列化漏洞学习笔记

    参考文章 一篇文章带你理解漏洞之 Python 反序列化漏洞 Python Pickle/CPickle 反序列化漏洞 Python反序列化安全问题 pickle反序列化初探 前言 上面看完,请忽略下 ...

  6. 「TJOI / HEOI2016」求和 的一个优秀线性做法

    我们把\(S(i, j)j!\)看成是把\(i\)个球每次选择一些球(不能为空)扔掉,选\(j\)次后把所有球都扔掉的情况数(顺序有关).因此\(S(i, j)j! = i![x^i](e^x - 1 ...

  7. 题解-CTS2019 珍珠

    题面 CTS2019 珍珠 有 \(n\) 个在 \([1,d]\) 内的整数,求使可以拿出 \(2m\) 个整数凑成 \(m\) 个相等的整数对的方案数. 数据范围:\(0\le m\le 10^9 ...

  8. 查看java程序中对象占用空间大小

    需要引入的jar包: <dependency> <groupId>com.carrotsearch</groupId> <artifactId>java ...

  9. 安卓qq视频动态名片制作器

    本软件来自互联网,仅供个人参考,严禁商业用途! 非常炫酷的diy动态名片教程,B格绝对高,内含软件教程代码,包会!

  10. 封装事件订阅来进行非父子组件的传值(React)

    const list={} // 将事件名和事件函数装进事件池里 function $on(name,func) { if(!name || !func) return; if(!Object.key ...