簡單微服務的搭建

簡單微服務搭建

1、下載並啓動Consul

訪問www.consul.io下載最新版Consul,下載後命令行啓動:web

consul.exe agent -dev

consul默認端口是8500,打開localhost:8500就能夠看到已經啓動了Consul。shell

2、建立一個服務

應用註冊到Consul,實現服務註冊發現及健康檢查。
1.引用Consul的nuget包,建立管道擴展,單例注入ConsulClient。

擴展方法: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");
}));

3、建立網關

建立一個Gateway的WebApi項目,添加Nuget包--Ocelot(15.0.6版本)。
1.修改Startup文件
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();
    }
2.添加一個gateway.json的配置文件
{
  "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>();
     });

4、在網關中使用

在網關中添加nuget包--Ocelot.Provider.Consul(15.0.6版本)
1.修改gateway.json文件
{
  "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"
    }
  }
}
2.Startup文件中添加consul的服務
public void ConfigureServices(IServiceCollection services)
    {
        //services.AddControllers();
        services.AddOcelot().AddConsul();
    }

5、最終實現最簡單的微服務的效果

1.先啓動consul,再啓動三個服務實例。

命令行啓動三個User服務,端口分別是777七、888八、9999微服務

dotnet MicroServiceLearn.UserService.dll --urls="http://*:{端口}" --ip="127.0.0.1" --port={端口}

此時,咱們在consul的ui界面能夠看到三個服務都已經註冊到consul並經過了心跳檢測。ui

2.啓動網關項目
dotnet MicroServiceLearn.Gateway.dll --urls="http://*:1000" --ip="127.0.0.1" --port=1000

最終效果展現:this

相關文章
相關標籤/搜索