Я работаю с микросервисной архитектурой. У меня так много сервисов зарегистрировано на моем шлюзе API (оцелот). Я не хочу открывать и проверять каждую службу на наличие конечных точек. Вместо этого я хочу видеть их по одному.
Ocelot может найти мой порт, но не показывает точку назначения контроллера моих микросервисов (я также могу достигать и выполнять операции с использованием URL-адреса шлюза/{ service})
Предыдущий файл program.cs шлюза (можно использовать точки, эта версия предшествует реализации Swagger, только для использования одного URL-адреса)
using Ocelot.DependencyInjection;
using Ocelot.Middleware;
var builder = WebApplication.CreateBuilder(args);
// Adding configuration for Ocelot
builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);
// Adding Ocelot to the services collection
builder.Services.AddOcelot(builder.Configuration);
var app = builder.Build();
// Using Ocelot middleware
app.UseOcelot().Wait();
app.Run();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
Program.cs шлюза
using MMLib.SwaggerForOcelot.DependencyInjection;
using Ocelot.DependencyInjection;
using Ocelot.Middleware;
using Microsoft.OpenApi.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);
builder.Services.AddOcelot(builder.Configuration);
builder.Services.AddSwaggerForOcelot(builder.Configuration);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "API Gateway", Version = "v1" });
});
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseSwaggerForOcelotUI(opt =>
{
opt.PathToSwaggerGenerator = "/swagger/docs";
opt.RoutePrefix = string.Empty;
});
app.UseOcelot().Wait();
app.Run();
Пример конечной точки в ocelot.json
"SwaggerEndPoints": [
{
"Key": "user",
"Config": [
{
"Name": "User Service",
"Version": "v1",
"Url": "http://localhost:5496/swagger/v1/swagger.json"
}
]
}, ...goes on
Пример того, как я получаю свои услуги:
"Routes": [
{
"DownstreamPathTemplate": "/{id}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5496
}
],
"UpstreamPathTemplate": "/api/user/{id}",
"UpstreamHttpMethod": ["GET"]
},
{
"DownstreamPathTemplate": "/get",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5496
}
],
"UpstreamPathTemplate": "/api/user/get",
"UpstreamHttpMethod": ["POST"]
},
{
"DownstreamPathTemplate": "/list",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5496
}
],
"UpstreamPathTemplate": "/api/user/list",
"UpstreamHttpMethod": ["POST"]
}, ...goes on
Я также могу без проблем использовать Swagger в каждом сервисе. Но на всякий случай я поделюсь каждой версией, которую я использую при попытке достичь конечных точек, чтобы отобразить их в Swagger на шлюзе.
Service program.cs (я могу использовать Swagger без комментариев строки, эти строки с комментариями предназначены только для проверки отображения конечных точек в шлюзе - не сработало -)
using App;
using App.Controller;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Identity;
using Microsoft.OpenApi.Models;
var builder = WebApplication.CreateBuilder(args);
builder.SetServices(typeof(Program).Assembly);
#region Custom codes
builder.Services.AddDbContext();
builder.Services.AddScoped();
// builder.Services.AddSwaggerGen(c =>
// {
// c.SwaggerDoc("v1", new OpenApiInfo { Title = "User Service API", Version = "v1" });
// });
var serviceProvider = builder.Services.BuildServiceProvider();
var eventBus = serviceProvider.GetRequiredService();
eventBus.Subscribe(serviceProvider, "service.User");
#endregion
var app = builder.Build();
// if (app.Environment.IsDevelopment())
// {
// app.UseSwagger();
// app.UseSwaggerUI(c =>
// {
// c.SwaggerEndpoint("/swagger/v1/swagger.json", "User Service API V1");
// });
// }
app.SetApp();
app.SetControllers();
app.Run();
Подробнее здесь: https://stackoverflow.com/questions/790 ... e-enpoints
Ocelot Gateway Swagger не отображает конечные точки службы ⇐ C#
Место общения программистов C#
-
Anonymous
1728936723
Anonymous
Я работаю с микросервисной архитектурой. У меня так много сервисов зарегистрировано на моем шлюзе API (оцелот). Я не хочу открывать и проверять каждую службу на наличие конечных точек. Вместо этого я хочу видеть их по одному.
Ocelot может найти мой порт, но не показывает точку назначения контроллера моих микросервисов (я также могу достигать и выполнять операции с использованием URL-адреса шлюза/{ service})
Предыдущий файл program.cs шлюза (можно использовать точки, эта версия предшествует реализации Swagger, только для использования одного URL-адреса)
using Ocelot.DependencyInjection;
using Ocelot.Middleware;
var builder = WebApplication.CreateBuilder(args);
// Adding configuration for Ocelot
builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);
// Adding Ocelot to the services collection
builder.Services.AddOcelot(builder.Configuration);
var app = builder.Build();
// Using Ocelot middleware
app.UseOcelot().Wait();
app.Run();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
Program.cs шлюза
using MMLib.SwaggerForOcelot.DependencyInjection;
using Ocelot.DependencyInjection;
using Ocelot.Middleware;
using Microsoft.OpenApi.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);
builder.Services.AddOcelot(builder.Configuration);
builder.Services.AddSwaggerForOcelot(builder.Configuration);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "API Gateway", Version = "v1" });
});
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseSwaggerForOcelotUI(opt =>
{
opt.PathToSwaggerGenerator = "/swagger/docs";
opt.RoutePrefix = string.Empty;
});
app.UseOcelot().Wait();
app.Run();
Пример конечной точки в ocelot.json
"SwaggerEndPoints": [
{
"Key": "user",
"Config": [
{
"Name": "User Service",
"Version": "v1",
"Url": "http://localhost:5496/swagger/v1/swagger.json"
}
]
}, ...goes on
Пример того, как я получаю свои услуги:
"Routes": [
{
"DownstreamPathTemplate": "/{id}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5496
}
],
"UpstreamPathTemplate": "/api/user/{id}",
"UpstreamHttpMethod": ["GET"]
},
{
"DownstreamPathTemplate": "/get",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5496
}
],
"UpstreamPathTemplate": "/api/user/get",
"UpstreamHttpMethod": ["POST"]
},
{
"DownstreamPathTemplate": "/list",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5496
}
],
"UpstreamPathTemplate": "/api/user/list",
"UpstreamHttpMethod": ["POST"]
}, ...goes on
Я также могу без проблем использовать Swagger в каждом сервисе. Но на всякий случай я поделюсь каждой версией, которую я использую при попытке достичь конечных точек, чтобы отобразить их в Swagger на шлюзе.
Service program.cs (я могу использовать Swagger без комментариев строки, эти строки с комментариями предназначены только для проверки отображения конечных точек в шлюзе - не сработало -)
using App;
using App.Controller;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Identity;
using Microsoft.OpenApi.Models;
var builder = WebApplication.CreateBuilder(args);
builder.SetServices(typeof(Program).Assembly);
#region Custom codes
builder.Services.AddDbContext();
builder.Services.AddScoped();
// builder.Services.AddSwaggerGen(c =>
// {
// c.SwaggerDoc("v1", new OpenApiInfo { Title = "User Service API", Version = "v1" });
// });
var serviceProvider = builder.Services.BuildServiceProvider();
var eventBus = serviceProvider.GetRequiredService();
eventBus.Subscribe(serviceProvider, "service.User");
#endregion
var app = builder.Build();
// if (app.Environment.IsDevelopment())
// {
// app.UseSwagger();
// app.UseSwaggerUI(c =>
// {
// c.SwaggerEndpoint("/swagger/v1/swagger.json", "User Service API V1");
// });
// }
app.SetApp();
app.SetControllers();
app.Run();
Подробнее здесь: [url]https://stackoverflow.com/questions/79087568/ocelot-gateway-swagger-does-not-display-service-enpoints[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия