基于netcore的微服务——consul(1)

在这里插入图片描述

在这里插入图片描述

consul作用:
1.当请求从浏览器,请求web服务,会经过网关Ocelot,
2.然后访问,WebServer,然后WebServer需要访问restserver
3.通过consul找到可用的restconsul服务,
4.然后WebServer调用可用的restserver

一、创建实例项目

在这里插入图片描述
创建一个webapi项目 MsgService

二、部署consul

1.下载window版64位
2.安装
3.测试启动,执行命令

//在生产环境下使用
consul agent -dev 

在这里插入图片描述
4.进入consul界面
http://localhost:8500
在这里插入图片描述

三、配置项目

1.MsgService配置

1.在API项目中创建health控制器
在这里插入图片描述
2.配置program.cs

 public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    //获取配置信息,通过命令行界面,在运行时动态的设置地址和路由
                    var config = new ConfigurationBuilder().AddCommandLine(args).Build();
                    //获得ip
                    String ip = config["ip"];
                    //获得端口号
                    String port = config["port"];
                    //通过获得的地址和端口号设置程序
                    webBuilder.UseStartup<Startup>().UseUrls($"http://{ip}:{port}");
                });

3.配置startup类中的configure

  //IHostApplicationLifetime appLifetime 通过这个参数注入对象
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env,IHostApplicationLifetime appLifetime)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            #region
            //读取配置信息
            string ip = Configuration["ip"];
            string port = Configuration["port"];
            //服务名
            string serviceName = "MsgService";
            //服务id
            string serviceId = serviceName + Guid.NewGuid();

            
            using (var consulClient = new ConsulClient(c => 
            {
                //consul的地址
                c.Address = new Uri("http://127.0.0.1:8500");
                c.Datacenter = "dc1"; 
            }))
            {
                //注册服务到consul
                consulClient.Agent.ServiceRegister(
                    new AgentServiceRegistration
                {
                    Address = ip, //服务提供者的能被消费者访问的ip地址(可以被其他应用访问的地址,本地测试可用127.0.0.1,机房环境写自己内外ip)
                    Port = Convert.ToInt32(port),//服务提供者的能被消费者访问的端口
                        ID = serviceId,
                    Name = serviceName,
                    //健康检查
                    Check = new AgentServiceCheck()
                    {
                        DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务停止多久注销
                        HTTP = $"http://{ip}:{port}/api/Health",//健康检查地址
                        Interval = TimeSpan.FromSeconds(10),//健康检查间隔时间
                        Timeout = TimeSpan.FromSeconds(5)
                    }
                }).Wait();//consul几乎都是异步方法,但是命名没有按照Async后缀的规范,所以需要调用Wait()或者await
            };

            //程序正常退出时候从Consul注销服务
            //要通过方法参数注入IApplicationLifetime
            appLifetime.ApplicationStopped.Register(() =>
            {
                using (var consulClient = new ConsulClient(c => { c.Address = new Uri("http://127.0.0.1:8500"); c.Datacenter = "dc1"; }))
                {
                    Console.WriteLine("应用退出");
                    consulClient.Agent.ServiceDeregister(serviceId).Wait();
                }
            });
            #endregion
            app.UseRouting();
            

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }

四、启动项目

首先启动consul

1.生成解决方案
2.进入当前项目的bin目录中

..\bin\Debug\netcoreapp3.1

3.在地址栏输入cmd,进入命令行界面
在这里插入图片描述
4.运行程序
开启两个服务

运行项目在本地的6001端口
 dotnet MsgService.dll --ip 127.0.0.1 --port 6001

再次进入目录使用命令

运行项目在本地的6001端口
 dotnet MsgService.dll --ip 127.0.0.1 --port 6002

5.进入localhost:8500的consul界面查看是否注册成功

在这里插入图片描述
运行成功,注册完成

六、consul

1.服务只会注册ip,端口,consul只保存服务吗,ip,端口,至于服务提供什么接口,参数consul不管
2.consul负责的是对服务的注册,对现有服务的管理,告诉调用者服务器现有情况,以及做健康检查,确定服务器处于可用状态,不可用会进行注销。

posted @   有诗亦有远方  阅读(19)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示