学习笔记----微服务中的服务注册与发现

前言:简单介绍微服务中服务注册与发现的配置使用

 

一,微服务中的服务注册与发现

分布式微服务架构中一个应用可能由一组职责单一化的服务组成, 所以服务需要一个统一的管理中间件,往上可以为方便服务之间的调用,往下可以便于服务的水平扩展以及服务状态的管理。

服务的注册:为每一个服务实例提供注册的服务组件(比如zookeeper\consul),为服务发现提供可用服务的目录

服务的发现:服务模块能够被其他调用及时发现

二,微服务中的Consul

1,什么是Consul

Consul 是HashiCorp公司推出的开源工具,由Go语言开发的服务网格解决方案,提供具有服务发现、配置和分段功能的全功能控制平面

2,Consul的特点

服务发现:Consul 的客户端可以注册一个服务,例如 api或mysql,其他客户端可以使用 Consul 来发现给定服务的提供者。使用 DNS 或 HTTP,应用程序可以轻松找到它们所依赖的服务。

健康检查:Consul 客户端可以提供任意数量的健康检查,要么与给定的服务相关联(“网络服务器是否返回 200 OK”),要么与本地节点(“存 利 用 率 低 于 90%”)相关联。操作员可以使用此信息来监视集群健

康状况,并且服务发现组件可以使用它来将流量从不健的主 机 路由 出 去。

KV 存储:应用程序可以将 Consul 的分层键/值存储用于多种目的,包括动态配置、功能标记、协调、领导选举等。简单的 HTTP API 使其易于使 用。

安全服务通信:Consul 可以为服务生成和分发 TLS 证书,以建立相互的 TLS 连接。 意图 可用于定义允许哪些服务进行通信。可以通过实时更 意 图 轻 松 管 理 服 务 分段,而不是使用复杂的网络拓扑和静态防火墙规则。

多数据中心:Consul 支持开箱即用的多个数据中心。这意味着 Consul 的用户不必担心构建额外的抽象层以扩展到多个区域。

 

三,Consul的简单使用

 1,安装:直接在官网下载解压即可 (Consul官网:https://www.consul.io/)

 2,运行 在consul.exe目录下打开命令行执行 consul.exe agent -dev,然后浏览器访问:http://localhost:8500/     

 

 

  3,项目中使用:

     (1)首先Nuget安装一下Consul:

       

 

 

   

     (2)添加注册配置:
   

、     ConsulSetHelper:

public static IApplicationBuilder RegisterConsul(this IApplicationBuilder app, IHostApplicationLifetime lifetime)
        {

            var list = ConsulSetting.List();
            if (list != null && list.Count > 0)
            {
                foreach (var item in list)
                {
                    var consulClient = new ConsulClient(c =>
                    {
                        //consul地址
                        c.Address = new Uri(item.ConsulAddress);
                    });
                    var registration = new AgentServiceRegistration()
                    {
                        ID = item.ID,//服务实例唯一标识
                        Name = item.ServiceName,//服务名
                        Address = item.ServiceIP, //服务IP
                        Port = item.ServicePort,//服务端口
                        Check = new AgentServiceCheck()
                        {
                            DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务启动多久后注册
                            Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔
                            HTTP = $"http://{item.ServiceIP}:{item.ServicePort}{item.ServiceHealthCheck}",//健康检查地址
                            Timeout = TimeSpan.FromSeconds(5)//超时时间
                        }
                    };
                    //服务注册
                    consulClient.Agent.ServiceRegister(registration).Wait();
                    //应用程序终止时,取消注册
                    lifetime.ApplicationStopping.Register(() =>
                    {
                        consulClient.Agent.ServiceDeregister(registration.ID).Wait();
                    });

                }

            }
            return app;
        }

 

服务注册就是把服务的基础信息插入到consul中,同一集群的服务建议使用相同的Name

 

  Startup:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseRouting();   
            //服务注册与发现
            app.RegisterConsul(lifetime);
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Hello World!");
                });
            });
        }

 

 运行效果:

  

 到这个界面就说明服务已经注册成功,其中consul 是系统默认的实例,OrderService(单机)和ProductService(集群) 为测试实例


      
 4,consul服务监听--Watches
 

   低故障率高可用的系统都不离不开一个及时的健康监控,consul 不仅提供了服务注册与发现、安全服务通信、多数据中心等功能,还有Watches机制,

   添加一个server.json配置文件

{

  "watches": [
    {
      "type": "checks",//监听类型
      "state": "critical",//监控服务的状态值:Passing,Warning,Critical
      "handler_type": "http",
      "http_handler_config": {
        "path": "http://localhost:6001/home/get",//通知路径
        "method": "get",//通知请求类型
        "header": {
          "x-foo": [ "XX", "XX" ]
        },
        "timeout": "10s",
        "tls_skip_verify": true
      }
    }
  ]
}

   Watches支持如下类型:

  1. Key – 监视指定K/V键值对
  2. Keyprefix – Watch a prefix in the KV store
  3. Services – 监视服务列表
  4. nodes – 监控节点列表
  5. service – 监视服务实例
  6. checks- 监视健康检查的值
  7. event – 监视用户事件

加上监听之后需要修改启动命令:consul.exe agent -config-dir=server.json -dev,server.json和consul.exe放在同一目录

 

 

 下一篇 Ocelot中的服务发现、注册、健康检查以及简单的服务治理

 

--------to be continue --------

   

     

 

 


         

 

   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章