1. Vai trò & Mục đích
Thiết lập cổng truy cập thống nhất để định tuyến đến nhiều dịch vụ backend, giúp ẩn địa chỉ thực tế của các microservice. Ocelot hỗ trợ tích hợp nhà cung cấp phát hiện dịch vụ (service discovery), cho phép xác định host/port của dịch vụ mục tiêu thông qua Consul. Kết hợp này cho phép mở rộng cluster dịch vụ tự động mà không cần chỉnh sửa cấu hình cổng.
2. Cài đặt cơ bản
2.1 Khởi tạo dự án
Install-Package Ocelot
2.2 Tạo file cấu hình ocelot.json
{
"Routes": [],
"GlobalConfiguration": {
"BaseUrl": "http://127.0.0.1:8888"
}
}
2.3 Đăng ký cấu hình
public class Program {
public static void Main(string[] args) =>
CreateHostBuilder(args).Build().Run();
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => {
webBuilder.UseStartup<Startup>();
})
.ConfigureAppConfiguration(builder => {
builder.AddJsonFile("ocelot.json");
});
}
2.4 Cấu hình dịch vụ
public class Startup {
public void ConfigureServices(IServiceCollection services) {
services.AddOcelot().AddConsul();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
if (env.IsDevelopment()) app.UseDeveloperExceptionPage();
app.UseRouting();
app.UseOcelot().Wait();
app.UseEndpoints(endpoints => {
endpoints.MapGet("/", async context => {
await context.Response.WriteAsync("Gateway Running");
});
});
}
}
3. Định tuyến tĩnh
{
"Routes": [{
"DownstreamPathTemplate": "/api/Users/GetUser?id={id}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [{
"Host": "127.0.0.1",
"Port": 5211
}],
"UpstreamPathTemplate": "/Users/Get?id={id}",
"UpstreamHttpMethod": ["Get", "Delete"]
}]
}
Cấu hình này chuyển đổi request từ http://127.0.0.1:8888/Users/Get?id=1 sang http://127.0.0.1:5211/api/Users/GetUser?id=1
4. Cân bằng tải đa phiên bản
"DownstreamHostAndPorts": [{
"Host": "127.0.0.1",
"Port": 5210
},{
"Host": "127.0.0.1",
"Port": 5211
},{
"Host": "127.0.0.1",
"Port": 5212
}],
"LoadBalancerOptions": {
"Type": "RoundRobin"
}
5. Tích hợp Consul
5.1 Cấu hình động
{
"Routes": [{
"DownstreamPathTemplate": "/api/Users/GetUser?id={id}",
"DownstreamScheme": "http",
"UpstreamPathTemplate": "/Users/Get?id={id}",
"ServiceName": "UserService",
"UseServiceDiscovery": true,
"LoadBalancerOptions": {
"Type": "LeastConnection"
}
}],
"GlobalConfiguration": {
"ServiceDiscoveryProvider": {
"Host": "localhost",
"Port": 8500,
"Type": "PollConsul",
"PollingInterval": 2000
}
}
}
5.2 Tham số cấu hình
ServiceName: Tên dịch vụ đăng ký trên ConsulLoadBalancerOptions: Thuật toán phân tải (RoundRobin/LeastConnection)PollingInterval: Chu kỳ kiểm tra Consul (ms)
6. Triển khai thực tế
6.1 Khởi động dịch vụ
dotnet MicroService.dll --urls="http://*:5213"
6.2 Kiểm tra
- Consul tự động phát hiện instance mới
- Ocelot cập nhật cấu hình định tuyến