如何让我的 RabbitMQ 辅助函数作为 Lambda 函数保持活动状态?

问题描述 投票:0回答:2

这些工作函数是 RabbitMQ 消费者,用于处理传入请求并回复响应。

我正在寻找有关如何在部署 Lambda 函数后保持这些辅助函数始终处于活动状态的指导。哪些配置或实践可以帮助实现这一目标?

// app.js
import e from 'express';
import cors from 'cors';
import bodyParser from 'body-parser';
import morgan from 'morgan';
import 'dotenv/config.js';
import mongoose from 'mongoose';
import SwaggerRouter from './swagger.js';
import logger from './logger.js';
import StartUpRouter from './routes/user_founder.js'
import VCRouter from './routes/user_vc.js';
import SuperAdminRouter from './routes/superadmin.js';
import { handleVCListRequest, startTokenValidationWorker, startUserValidationWorker, startVCDataWorker } from './workers/messageQueueWorker.js';
import { startWorker } from './services/rabbitMQService.js';
import { processMessage } from './workers/emailWorker.js';

const app = e();
app.use(cors());
app.use(morgan('dev'));
app.use(bodyParser.json());
app.use(SwaggerRouter);

// ...other routes and middleware...

mongoose.connect(process.env.MONGO_URL, { useUnifiedTopology: true, useNewUrlParser: true })
.then(() => {
  app.listen(process.env.PORT || 4001);
  logger.info({listening: `Server is Processing on ${process.env.PORT}.`});
  logger.info({success: "Connected to AuthenticationService Database."});
  console.log({listening: `Server is Processing on ${process.env.PORT}.`});
  console.log({success: "Connected to Database."});

  startWorker(processMessage).catch((error) => {
    console.error('Error while sending email:', error.message);
  });

  startTokenValidationWorker().catch((error) => {
    logger.error('Error starting token validation worker:', error.message);
    console.error('Error starting token validation worker:', error.message);
  });

  // ...other worker functions...

  handleVCListRequest().catch((error) => {
    logger.error('Error starting vc list worker:', error.message)
    console.error('Error starting vc list worker:', error.message);
  });
})
.catch((err) => {
  logger.error({error: err.message});
  console.error({error: err});
});

export default app;

// lambda.js
import ServerlessHttp from "serverless-http";
import app from "./app.js";

export const handler = ServerlessHttp(app);
javascript node.js amazon-web-services aws-lambda rabbitmq
2个回答
0
投票

AWS Lambda 作为无服务器计算服务并不适合这里。

虽然您可以让 Lambda 函数保持温暖,但无服务器架构的本质和目的是不让服务保持 24/7 运行。

RabbitMQ 消费者应该始终监听消息,应该在 ECS、EC2 等使用服务器且可以 24/7 可用的服务上运行。


0
投票

单个 AWS Lambda 调用(实例)运行时间不能超过 15 分钟。您当前设计系统的方式根本无法在 AWS Lambda 环境中工作。

如果您通过 Amazon MQ 运行 RabbitMQ,则当您的 Amazon MQ RabbitMQ 实例中有消息时,您可以让 Amazon 自动调用您的 Lambda 函数。在该设置中,您的 Lambda 函数不会连接到 RabbitMQ,而是使用要在

event
对象内部处理的消息来调用它。

如果您不使用 Amazon MQ 来运行 RabbitMQ 服务器,那么 AWS Lambda 将无法工作,而您需要使用 EC2 或 ECS 等始终运行事件处理服务的服务。

© www.soinside.com 2019 - 2024. All rights reserved.