訪問www.consul.io下載最新版Consul,下載後命令行啓動:web
consul.exe agent -dev
consul默認端口是8500,打開localhost:8500就能夠看到已經啓動了Consul。shell
擴展方法:json
public static void UseConsul(this IApplicationBuilder app, IConfiguration configuration, IConsulClient consul) { string consulGroup = configuration["ConsulGroup"];//來自配置文件 string ip = configuration["ip"];//來自命令行 int port = Convert.ToInt32(configuration["port"]);//來自命令行 string serviceId = $"{consulGroup}_{ip}_{port}"; //健康檢查 var check = new AgentServiceCheck() { Interval = TimeSpan.FromSeconds(6), HTTP = $"http://{ip}:{port}/heartcheck", Timeout = TimeSpan.FromSeconds(2), DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(2) }; //註冊到consul var register = new AgentServiceRegistration() { Check = check, Address = ip, Port = port, Name = consulGroup, ID = serviceId }; consul.Agent.ServiceRegister(register); }
Startup中添加擴展:api
app.UseConsul(Configuration, consul);//consul來自方法注入IConsulClient
服務注入:app
services.AddSingleton<IConsulClient>(x => new ConsulClient(c => { c.Address = new Uri("http://localhost:8500"); }));
public void ConfigureServices(IServiceCollection services) { //services.AddControllers(); services.AddOcelot(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { //if (env.IsDevelopment()) //{ // app.UseDeveloperExceptionPage(); //} //app.UseRouting(); //app.UseAuthorization(); //app.UseEndpoints(endpoints => //{ // endpoints.MapControllers(); //}); app.UseOcelot(); }
{ "ReRoutes": [ { "DownstreamPathTemplate": "/{url}", //下游地址,就是訪問服務所須要的地址 "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 7777 //服務端口 } ], "UpstreamPathTemplate": "/{url}", //上游地址,就是訪問網關的路由地址 "UpstreamHttpMethod": [ "Get", "Post", "Put", "Delete" ] } ] }
修改Program.cs,調用json文件ide
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, builder) => { builder.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath); builder.AddJsonFile("gateway.json", false, true); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
{ "ReRoutes": [ { "DownstreamPathTemplate": "/{url}", //下游地址,就是訪問服務所須要的地址 "DownstreamScheme": "http", "UpstreamPathTemplate": "/{url}", //上游地址,就是訪問網關的路由地址 "UpstreamHttpMethod": [ "Get", "Post", "Put", "Delete" ], "ServiceName": "user_service",//consul的組名,須要與服務註冊到consul時的名稱相同 "LoadBalancerOptions": { "Type": "RoundRobin"//輪詢 }, "UseServiceDiscovery": true//啓動服務發現 } ], "GlobalConfiguration": { "BaseUrl": "http://localhost:1000",//網關的url "ServiceDiscoveryProvider": { "Host": "localhost",//consul的ip "Port": "8500",//consul的port "Type": "Consul" } } }
public void ConfigureServices(IServiceCollection services) { //services.AddControllers(); services.AddOcelot().AddConsul(); }
命令行啓動三個User服務,端口分別是777七、888八、9999微服務
dotnet MicroServiceLearn.UserService.dll --urls="http://*:{端口}" --ip="127.0.0.1" --port={端口}
此時,咱們在consul的ui界面能夠看到三個服務都已經註冊到consul並經過了心跳檢測。ui
dotnet MicroServiceLearn.Gateway.dll --urls="http://*:1000" --ip="127.0.0.1" --port=1000
最終效果展現:this