Код: Выделить всё
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": "*"
}
Код: Выделить всё
{
"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"
}
]
}
]
}
Но 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
Мобильная версия