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. 第12.4节 Python伪随机数数生成器random模块导览

    random模块实现了各种分布的伪随机数生成器,常用功能包括: random.seed(a=None, version=2):初始化随机数生成器,如果 a 被省略或为 None ,则使用当前系统时间. ...

  2. 第七章、PyQt图形界面应用程序的事件捕获方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一. 概述 PyQt的图形界面应用中,事件处理类似于Windows系统的消息处理.一个带图形界面的应 ...

  3. PyQt(Python+Qt)学习随笔:QCommandLinkButton的特征及用途

    CommandLinkButton是Windows Vista引入的新控件,,它的预期用途与单选按钮类似,用于在一组互斥选项之间进行选择.命令链接按钮不应单独使用,而应作为向导和对话框中单选按钮的替代 ...

  4. 第 7 篇 Scrum 冲刺博客

    每天举行会议 会议照片: 昨天已完成的工作与今天计划完成的工作及工作中遇到的困难: 成员姓名 昨天完成工作 今天计划完成的工作 工作中遇到的困难 蔡双浩 补充注释,初步查找bug 修改bug 无 陈创 ...

  5. 矩阵乘法优化DP复习

    前言 最近做毒瘤做多了--联赛难度的东西也该复习复习了. Warning:本文较长,难度分界线在"中场休息"部分,如果只想看普及难度的可以从第五部分直接到注意事项qwq 文中用(比 ...

  6. 【学习笔记】动态 dp 入门简易教程

    序列 dp 引入:最大子段和 给定一个数列 \(a_1, a_2, \cdots, a_n\)(可能为负),求 \(\max\limits_{1\le l\le r\le n}\left\{\sum_ ...

  7. dp斜率优化

    算法-dp斜率优化 前置知识: 凸包 斜率优化很玄学,凭空讲怎么也讲不好,所以放例题. [APIO2014]序列分割 [APIO2014]序列分割 给你一个长度为 \(n\) 的序列 \(a_1,a_ ...

  8. day106:MoFang:BUG:获取数据验证token是否过期&相册/相机取消头像无法显示&MongoDB

    目录 BUG1:前端在获取数据时,要检验token是否过期 BUG2:相册/相机取消后设置页面头像无法显示 MongoDB 1.MongoDB基本介绍 2.MongoDB安装 3.MongoDB:通用 ...

  9. 三、java多线程核心技术(笔记)——线程的优先级

    概论: 在操作系统中,线程可以划分优先级,优先级高的获得的CPU资源较多,也就是CPU优先执行优先级较高的线程.在JAVA中线程的优先级 分1~~10个10个等级.大于或者小于会报异常. 一.线程优先 ...

  10. 5+App 相关记录

    一.页面跳转到app 1.应用的manifest.json文件,plus --> distribute --> google 节点下,增加属性 schemes 2.打包后,在手机里安装. ...