网络编程
位置:首页>> 网络编程>> ASP.NET>> .Net Core服务治理Consul使用服务发现

.Net Core服务治理Consul使用服务发现

作者:老马-Max  发布时间:2023-06-25 07:49:19 

标签:.Net,Core,Consul,服务,发现

先思考一些问题:它是做什么的、以及怎么使用它。带着这些问题往下走。

consul是做什么的

consul用于微服务下的服务治理。服务治理是什么?它包含但不限于:服务发现、服务配置、健康检查、键值存储、安全服务通信、多数据中心等。

为什么需要服务治理?举个例子:最开始的服务比较简单,各服务之间通过API就能访问。后面业务复杂了,服务也跟着复杂了,搞分布式了,而分布式又必然是多服务器部署,这就有一个问题:如果服务之间还是用API访问,那某个服务所在的服务器挂掉以后这个服务就不能用了,也不能自动转移,那么只能人肉运维了。这时候大家在想:如果下游调用上游,只需要一个统一的地址,不用关注负载均衡、节点失效之类的问题,也不用关注可用性,这些都有一个中间件来完成,那该有多好。这个中间件要做的事情,就是服务治理,也就是本文的consul,它就是解决这个事的。但其实也不是只有它能做这个事,zooKeeper、etcd也能做这个事,也没有什么高下之分,用什么主要看自己,看公司。对自己来说,哪个摸得透、玩的熟就用哪个。对公司来说,哪个市场认可度高就用哪个,说白了就是哪个用的人多。用的人多会的人就多,招人换人速度就快了,互联网企业追求的不就是速度么?“时间就是金钱,效率就是生命”,这句话早期在深圳随处可见,至今仍然适用。

题外话有点多,接着往下走。

怎么使用consul

这里只讲docker内的consul。首先下载一个镜像:

dokcer pull consul

然后运行起来:

docker run -itd -p 8700:8500 --name myconsuldemo consul

成功运行后能看到如下页面:

.Net Core服务治理Consul使用服务发现

tips:consul的默认端口是8500,docker启动可以映射到任意端口。

服务注册

服务发现的概念,简单来说就是所有节点程序启动时都去consul注册一下,注册后的信息统一保存在consul中以供调用。是不是很简单?

现在net core 3.1下完成consul服务注册。

首先需要添加nuget包:

.Net Core服务治理Consul使用服务发现

然后自行封装一个注册服务,节省时间先上源码:

public static void Reg(IConfiguration configuration)
       {
           string ip = configuration.GetSection("ip").Value.ToString();

string port = configuration.GetSection("port").Value.ToString();

string weight = configuration.GetSection("weight").Value.ToString();

string address = configuration.GetSection("address").Value.ToString();//consul的启动地址

string center = configuration.GetSection("center").Value.ToString();//数据中心名称

ConsulClient client = new ConsulClient(x =>
           {
               x.Address = new Uri(address);
               x.Datacenter = center;
           });

client.Agent.ServiceRegister(new AgentServiceRegistration()
           {
               ID = $"server {ip}:{port}",
               Name = "shenzhen-ma",//分组名称
               Address = ip,
               Port = int.Parse(port)
           });
       }

配置文件:

{
 "Logging": {
   "LogLevel": {
     "Default": "Information",
     "Microsoft": "Warning",
     "Microsoft.Hosting.Lifetime": "Information"
   }
 },
 "AllowedHosts": "*",
 "ip": "127.0.0.1",
 "port": 5100,
 "weight": 1,//权重,负载均衡的重要参数
 "address": "http://127.0.0.1:8700",//consul地址
 "center": "dc1"//数据中心
}

最后,这个服务需要在程序启动的时候调用,只一次就好。直接把调用放在startup里就好,这样程序启动的时候就会自动注册一个服务。

为了能够动态修改配置文件,接下来通过控制台启动程序:

dotnet run --urls="http://*:5000" --ip="127.0.0.1" --port=5000

启动成功以后,转到consul的ui看一下:

.Net Core服务治理Consul使用服务发现

能看到多了一个分组【shenzhen-ma】,点进去看下我们的服务:

.Net Core服务治理Consul使用服务发现

127.0.0.1:5000,没毛病。这时候模拟一下多节点,再多启动两个程序试试看:

.Net Core服务治理Consul使用服务发现

5001,5002也自动注册进入了这个分组。

因为时间关系,今天只能写到这里了,还有很多东西没有写,服务调用、健康检查什么的,我会尽快再发文的。

来源:https://www.cnblogs.com/muchengqingxin/p/15007491.html

0
投稿

猜你喜欢

  •   有一个网站A想找别的网站作为代理商,在代理商的页面上插入自己的广告。它提供一个注册页面给代理商,代理商注册后,会得到一个ID,
  • 一、概述 对象是Oracle8i以上版本中的一个新的特性,对象实际是对一组数据和操作的封装,对象的抽象就是类。在面向对象技术中,对象涉及到以
  • 或许你知道,Internet Explorer 6 已经不是最先进的浏览器了。事实上,它已经八岁了,但是很多人还在使用这个不安全的浏览器。正
  • sysdate+(5/24/60/60) 在系统时间基础上延迟5秒 sysdate+5/24/60 在系统时间基础上延迟5分钟 sysdat
  • 代码如下:< % '功能:显示数据库中表名、字段名、字段内容 '原创:wangsdong
  • 有些时候我们发现一些模块没有提供pip install 命令和安装教程 , 只提供了一个setup.py文件 , 这个时候如何安装呢?步骤打
  • .asa是文件后缀名,它是Active Server Application的首字母缩写。Global.asa文件可以管理在ASP应用中两个
  • 虽然现在的GMail已经看不到这个效果,但之前那个可爱的深红色Loading仍然让许多人喜爱。我也将这款效果融入了我自己的WordPress
  • sql server中变量要先申明后赋值:局部变量用一个@标识,全局变量用两个@(常用的全局变量一般都是已经定义好的);申明局部变量语法:d
  •   [1]好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋
  • 为什么传输几千个表的数据时向导会失败?当前的向导体系结构会创建一个 DTS 软件包数据流以传输数据。但如果要处理几千个表,则会遇到可伸缩性限
  • 一个日期联动选择器javascript源码,年月日联动显示,准确显示日期(包括闰年日期),可自定义日期范围。 【select】 先说清空一个
  • 问题描述:使用 SQL 2005 w/ SP2 的汇出汇入精灵将数据从 Access 汇入到 SQL2005 发生了错误,但使用在SQL 2
  • 为了降低用户注册难度,国际站的主注册表单一直在改进。主注册三月至今发生了两次较大的变化,现在对表单调整的地方分解如下:1.  两步
  • 概要说明:自动更新程序主要负责从服务器中获取相应的更新文件,并且把这些文件下载到本地,替换现有的文件。达到修复Bug,更新功能的目的。本文作
  • 年前接到QCon的邀请,颇感意外。在我的印象里,QCon大会是后端开发工程师和架构师的技术大会。后来去QCon大会的官网搜索了下,发现原来Q
  • 目前网络数据库的应用已经成为最为广泛的应用之一了,并且关于数据库的安全性,性能都是企业最为关心的事情。数据库渐渐成为企业的命脉,优化查询就解
  • opendir &ndash; 打开一个目录句柄,可用于之后的 closedir(),readdir() 和 rewinddir()
  • 导航标签彼此互斥、完全穷尽。导航标签其实就是一种文字表达形式,我们用标签来代表网站上的各种分类信息。比如“联系我们”这个标签,代表的内容通
  • 描述event代表事件的状态,例如触发event对象的元素、鼠标的位置及状态、按下的键等等。event对象只在事件发生的过程中才有效。eve
手机版 网络编程 asp之家 www.aspxhome.com