如何在本地运行配置在同一自定义域中的多个微服务?



我按照本文配置了我的后端:如何使用Serverless在一个API域中部署多个微服务

我明白使用无服务器离线插件可以逐一部署服务。但是这个插件会在不同的端口上创建多个迷你apigateways。

我的前端不知道。它假设一切都已部署,并准备在一个端口上使用。

如果我想测试一个需要有效会话的功能,我不能在本地这样做,因为我的会话和功能由两个不同的服务管理。

在这种情况下,任何手动测试只有在我部署了所有更改后才有可能。这需要很多时间。

是否有一种方法可以将所有服务部署在同一个端口上,在单个API网关后面?

我不能说我完全理解这个问题,但我会试一试。我假设你的意思是单个"微服务"是一个独立的API,它有自己的子域(例如service1.yourdomain.com, service2.yourdomain.com等)。然后尝试在您的机器上使用无服务器脱机进行本地测试。

虽然我不知道这将如何在子域级别工作,但似乎有一个基于路径的选项。正如这里提到的,还有一个插件可以在内部根据路径路由请求。它似乎基本上把一个代理放在其他api的前面,并转发到正确的端口https://github.com/edis/sls-multi-gateways。完整的媒体文章在这里:https://aws.plainenglish.io/run-multiple-serverless-applications-d8b38ef04f37.

话虽如此,使用docker将请求转发到基于主机名或路径的不同端口上运行的服务,总是可以自己设置代理的。

sls-multi-gateways包运行多个API网关。如果您有多个服务,并且希望同时在本地运行多个服务,则可以添加该包。但这不是一个完整的解决方案,因为最终您可能希望后端可以在单个主机上访问。

这意味着你正在添加一个依赖项,它让你完成了一半。

当您尝试在没有此包的情况下在本地运行多个网关时,您会得到一个错误,指出端口3002已被使用。这是因为serverless offline插件将3002指定为lambda函数的默认端口。

由于我们正在尝试运行多个服务,第一个服务将占用3002,其余服务将无法启动。要解决这个问题,您必须通过在serverless中指定lambdapport来告诉serverless offline,它应该使用哪些端口来为每个服务部署lambda函数。您的服务的Yml文件。可以这样做:

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}.`);
});

相关内容

  • 没有找到相关文章

最新更新