Я не вижу конечные точки микросервиса в Swagger в OcelotC#

Место общения программистов C#
Ответить
Anonymous
 Я не вижу конечные точки микросервиса в Swagger в Ocelot

Сообщение Anonymous »

Код файла CS

Код: Выделить всё

using API;
using Confluent.Kafka;
using Ocelot.DependencyInjection;
using Ocelot.Middleware;

var builder = WebApplication.CreateBuilder(args);

var producerConfig = new ProducerConfig();
builder.Configuration.GetSection("Kafka").Bind(producerConfig);
builder.Configuration.AddJsonFile("ocelot.json", true, true);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();

builder.Services.AddOcelot(builder.Configuration);
builder.Services.AddSwaggerForOcelot(builder.Configuration);
builder.Services.AddSwaggerGen();

builder.Services.AddSingleton
(producerConfig);

var app = builder.Build();
app.UseDeveloperExceptionPage();

app.UseRouting();
app.UseEndpoints(endpoints =>  // Define the endpoint map
{
endpoints.MapControllers();
});

//app.UseHttpsRedirection();
//app.UseAuthorization();

app.UseSwagger()
.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Swagger.API  v1"))
.UseSwaggerForOcelotUI()
.UseOcelot().Wait();

app.Run();
Вот как я это настраиваю
Также вот мой код файла docker-compose.yml

Код: Выделить всё

services:
gateway-api:
container_name: gateway-api
ports:
- "52791:5000"
build:
context: .
dockerfile: API/Dockerfile
environment:
- ASPNETCORE_URLS = "http://*:5000",
- ASPNETCORE_HTTPS_PORTS = "5050",
- ASPNETCORE_HTTP_PORTS = "5000"
points-service:
container_name: points-service
depends_on:
- "gateway-api"
ports:
- "52792:5001"
environment:
- ASPNETCORE_URLS="http://*:5001",
- ASPNETCORE_HTTPS_PORTS="5051",
- ASPNETCORE_HTTP_PORTS="5001"
build:
context: .
dockerfile: Services/PointsService/PointsService.Api/Dockerfile
And appsettings.json code

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Ocelot": "Debug"
}
},
"Kafka": {
"BootstrapServers": "broker.local:19092",
"SecurityProtocol": "Ssl",
"SslCaLocation": "ssl/ca-cert.pem",
"SslCertificateLocation": "ssl/client-cert.pem",
"SslKeyLocation": "ssl/client-key.pem",
"SslKeyPassword": "123456"
},
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://*:5000"
}
}
},
"AllowedHosts": "*"
}
Также здесь находится файл ocelot.json

Код: Выделить всё

{
"Routes": [
{
"DownstreamPathTemplate": "/api/{everything}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "points-service",
"Port": 5001
}
],
"UpstreamPathTemplate": "/api/{everything}",
"UpstreamHttpMethod": [ "Get", "Post", "Put", "Delete" ],
"SwaggerKey": "points"
}
],
"GlobalConfiguration": {
"BaseUrl": "http://gateway-api:5000"
},
"SwaggerEndPoints": [
{
"Key": "points",
"Config": [
{
"Name": "Points API",
"Version": "v1",
"Url": "http://points-service:5001/swagger/v1/swagger.json"
}
]
}
]
}
Я могу без проблем вызывать конечные точки шлюза-api, поскольку ocelot перенаправляется в микросервис.
Но Swagger не видит конечные точки службы. Я проверил журналы и увидел это предупреждение.
Я могу без проблем вызывать конечные точки шлюза-api.
п>

Код: Выделить всё

warn: Ocelot.Responder.Middleware.ResponderMiddleware[0]
2024-10-30 21:04:21 requestId: 0HN7P2MKOVR6R:00000001, previousRequestId: No PreviousRequestId, message: 'Error Code: UnableToFindDownstreamRouteError Message: Failed to match Route configuration for upstream path: /, verb: GET. errors found in ResponderMiddleware. Setting error response for request path:/, request method: GET'
также я запускаю эту команду из контейнера, и она работает нормально.
curl http://points-service:5001/swagger/v1/swagger.json
Пожалуйста помогите мне с этим, я новичок в оцелоте и не понимаю, что делаю не так.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -in-ocelot
Гость
 Re: Я не вижу конечные точки микросервиса в Swagger в Ocelot

Сообщение Гость »

Ты не одинок. У меня локально без докера все работает.
В докере - нет. Причем контейнер с Ocelot видит другие сервисы и запросы отрабатывают через curl.
Это проблема какая-то с настройками, а вот какими я сейчас ищу. Причем я сам не новичок и мне помогают профи, но пока не нашли ничего - тех кто пользуется докером без кубера почти нет - а здесь походу нужен именно опыт чей-то, кто уже сталкивался.
Я пробовал Consul - тот же результат. Пробовал разные версии Ocelot - не помогло.
Так что пока без ответа. Если особого интереса нет использовать Ocelot, то делай без него.
У меня спортивный интерес разные штуки проверять и использовать.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»