该sls-multi-gateways
软件包运行多个 API 网关。如果你有多个服务并且想要同时在本地运行,你可以添加包。但这不是一个完整的解决方案,因为最终您可能希望后端可以在单个主机上访问。
这意味着您正在添加一个依赖项,它会让您半途而废。
当您尝试在没有此软件包的情况下在本地运行多个网关时,您会收到错误消息,指出端口 3002 已被使用。这是因为serverless offline
插件将 3002 分配为 lambda 函数的默认端口。
由于我们试图运行多个服务,第一个服务将占用 3002,其余的将无法启动。要解决此问题,您必须通过在 serverless.yml 文件中为您的服务指定 lambdaPortserverless offline
来告诉它应该使用哪些端口来为每个服务部署 lambda 函数。这可以像这样完成:
custom:
serverless-offline:
httpPort: 4001 // this is the port on which the service will run
lambdaPort: 4100 // this is the port which will be assigned to the first lambda function in the service
因此,对于每个服务,端口将是400n
并且 lambda 端口将4n00
是 如果您的服务中的 lambda 函数少于 100 个,则此模式是安全的。看起来您只需要分配一个端口来支持手动 lambda 调用。
现在您可以使用concurrently
. 我们现在是我们将与sls-multi-gateways
。
接下来我们需要的是代理。我将createHttpProxy
中间件与express
. 但是您可以根据您的项目进行任何设置。
下面是代理服务的代码:
const express = require("express");
const {
createProxyMiddleware,
} = require("http-proxy-middleware");
const port = process.env.PORT || 5000; // the port on which you want to access the backend
const app = express();
app.use(
`/service2`,
createProxyMiddleware({
target: `${urlOfService2}`,
})
);
app.use(
`/service1`,
createProxyMiddleware({
target: `${urlOfService1}`,
})
);
app.listen(port, () => {
console.log(`Proxy service up on ${port}.`);
});