我创建了一个 SPA,它必须与后端的各种微服务进行通信。出于部署和延迟的原因,我们必须确保前端只与一个端点通信,然后在内部路由到其他微服务。
我怎样才能使它与 ASP.NET Core 一起工作?我查看了Ocelot,它提供了非常相似的东西,但正如我在文档中看到的那样,我必须配置 IP 地址/主机名,在该 IP 地址/主机名下,将从客户端访问后端,我不知道这些信息,因为这将在之后确定部署(并且对于每台机器都可能不同,因为该服务将在各种边缘设备上运行)。
这是否可以使用一个简单的路由中间件来实现,该中间件在 url 中查找某个路径(例如 /api/otherservice),向负责的微服务(例如http://localhost:1234/api/otherservice)发送一个 http 请求并返回给来电者的信息?
我正在使用 ASP.NET Core 2.1。
更新:我设法让 ocelot 运行以将所需的路由应用到下游微服务。但是,我使用 Ocelot 的服务本身提供了路由(为 Web 应用程序前端和其他一些后端 api 路由提供服务)。有谁知道我如何告诉 Ocelot 回退到它正在运行的服务中声明的路由,如果有一条不包含在 ocelot.json 中的路由(或者相反,告诉 ASP.NET Core 只使用用于路由 id 的 ocelot 无法自行解析)。
更新 2:这是我的 ocelot 配置,它会导致无限循环:
{
"ReRoutes": [
{
"DownstreamPathTemplate": "/api/tool/{url}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5200
}
],
"UpstreamPathTemplate": "/api/tool/{url}",
"UpstreamHttpMethod": [ "Get", "Post", "Put", "Delete" ]
},
{
"DownstreamPathTemplate": "/{everything}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5100
}
],
"UpstreamPathTemplate": "/{everything}",
"Priority": 0
}
]
}
省略第二个 (catchAll) - 路由成功路由到工具路由,但无法提供包含 Ocelot 中间件的 ASP.NET Core 服务提供的路由。