RabbitMQ and Lambda
Recently, I am working on Lambda sending message to RabbitMQ. We are using typescript, so the package is
"@types/amqplib": "^0.5.7",
We take the callback example as our references
https://github.com/squaremo/amqp.node/blob/master/examples/tutorials/callback_api/emit_log.js
https://github.com/rabbitmq/rabbitmq-tutorials/blob/master/javascript-nodejs/src/emit_log_topic.js
Here is the detail about all the API
http://www.squaremobius.net/amqp.node/channel_api.html#model_createChannel
The core codes are as follow:
const mq_host = process.env.RMQ_SERVER_ADDRESS;
const mq_virtualHost = process.env.RMQ_SERVER_VIRTUALHOST;
const mq_userName = process.env.RMQ_SERVER_USERNAME;
const mq_password = process.env.RMQ_SERVER_PASSWORD;
export interface RabbitOptions {
host: string;
virtualHost: string;
userName: string;
password: string;
}
const logger = getLogger();
async function RabbitMQ(options: RabbitOptions) {
const hasAllOptions = (opts: RabbitOptions) => {
return !!opts.host && !!opts.virtualHost && !!opts.userName && !!opts.password;
};
if (!hasAllOptions(options)) {
throw new Error(
`options missing one of these parameters: ${JSON.stringify({
host: '<mq hostname or IP>',
virtualHost: '<virtual host name>',
userName: '<username>',
password: '<password>',
})}`
);
}
const opt = options;
const mqConnectString = `amqp://${opt.userName}:${opt.password}@${opt.host}/${opt.virtualHost}`;
const connection = await connectMq();
const channel = await createChannelMq(connection);
async function connectMq(): Promise<any> {
return new Promise(function(resolve, reject) {
logger.info(`creating mq connection to host: ${mqConnectString}`);
amqp.connect(
mqConnectString,
(err: Error, conn: any) => {
if (err) {
logger.error(err, 'connectMq failed');
reject(err);
} else {
resolve(conn);
}
}
);
});
}
async function createChannelMq(conn: any): Promise<any> {
logger.info(`creating mq channel to host: ${mqConnectString}`);
return new Promise(function(resolve, reject) {
conn.createChannel((err: Error, ch: any) => {
if (err) {
logger.error(err, 'createChannel failed');
return reject(err);
} else {
resolve(ch);
}
});
});
}
return {
async sendToMq(exchangeName: string, routingKey: string, message: string) {
console.log(`sending [${message}] to exchange ${exchangeName} with routingkey = '${routingKey}'`);
channel.publish(exchangeName, routingKey, new Buffer(message));
},
async closeMq() {
setTimeout(() => {
channel.close();
connection.close();
}, 200);
},
};
}
export { RabbitMQ };
The important part is the channel.close() and connection.close(), we need to give some time for the message sending in lambda.
References:
https://github.com/rabbitmq/rabbitmq-tutorials/blob/master/javascript-nodejs/src/emit_log_topic.js
https://github.com/squaremo/amqp.node/blob/master/examples/tutorials/callback_api/emit_log.js
http://www.squaremobius.net/amqp.node/channel_api.html#model_createChannel
https://stackoverflow.com/questions/28921127/how-to-wait-for-a-javascript-promise-to-resolve-before-resuming-function
分享到:
相关推荐
Lambda应用程序的目的是从 FTP下载能源价格并将其插入RabbitMQ队列中 该无服务器项目创建具有两个入口点的Lambda函数: 明天,每天触发在下午4:00(UTC时间)自动下载明天的能源价格 by_date此函数是Node应用程序,...
Microservices and RabbitMQ ..................................... 12 What is RabbitMQ?....................................................... 16 Exchanges, Routing Keys and Bindings................... ...
适用于Efergy仪表的AWS Lambda驱动程序 该无服务器项目部署了三个不同的Lambda函数: authorizerUser此函数启用API网关的授权者功能。 它查询DynamoDB表,以检查http标头请求中的API令牌是否有效。 worker此功能...
rabbitmq配置文件,用于rabbitmq管理
`rabbitmq-c`是RabbitMQ的一个C语言客户端库,它使得在C程序中与RabbitMQ服务器进行交互变得更加简单。本文将详细介绍如何使用CMake编译`rabbitmq-c-master`源码,并讨论相关知识点。 首先,我们需要了解CMake,这...
RabbitMQ服务器3.10.5是一款广泛使用的开源消息代理和队列服务器,它基于高级消息队列协议(AMQP)实现。这个版本的RabbitMQ提供了稳定且高效的中间件服务,允许分布式系统中的应用程序进行异步通信,确保数据可靠...
RabbitMQ是一个开源的消息代理和队列服务器,广泛用于分布式系统中的消息传递。它基于AMQP(Advanced Message Queuing Protocol)标准,允许应用程序之间异步通信,并提供了高可用性、可扩展性和容错性。RabbitMQ的...
RabbitMQ是一款开源的消息队列服务软件,它实现了高级消息队列协议(AMQP),以高性能、健壮和可伸缩性闻名,主要由Erlang语言编写。Erlang是一种适合于构建并发处理能力强、高可用性系统的编程语言,这些特点使得...
标题 "kettle rabbitmq 插件开发" 涉及的是如何在 Pentaho Kettle(也称为 Spoon)中创建和使用 RabbitMQ 插件。Kettle 是一个开源的数据集成工具,它允许用户进行数据抽取、转换和加载(ETL)操作。RabbitMQ 是一个...
RabbitMQ is one of the most powerful Open Source message broker software, which is widely used in tech companies such as Mozilla, VMware, Google, AT&T, and so on. RabbitMQ gives you lots of fantastic ...
**RabbitMQ实战指南** RabbitMQ是一款广泛应用的开源消息队列系统,它基于Advanced Message Queuing Protocol(AMQP)标准,提供高可用性、可靠性和可扩展性。本实战指南将带你深入理解RabbitMQ的核心概念、安装与...
在这个"麒麟v10系统Rabbitmq3.6.10安装包"中,我们将探讨如何在麒麟v10环境下安装和配置RabbitMQ 3.6.10版本。 首先,安装RabbitMQ前需要确保系统满足必要的依赖条件。麒麟v10内核版本为4.19.90-17.ky10.x86_64,这...
【RabbitMQ性能测试报告】 本测试报告详细记录了对RabbitMQ的性能评估,包括在单机模式和集群模式下的压力和稳定性测试。RabbitMQ是业界广泛使用的开源消息代理,它基于AMQP(Advanced Message Queuing Protocol)...
**RabbitMQ-c源码分析** RabbitMQ-c是一个轻量级且高效的C语言实现的RabbitMQ客户端库。RabbitMQ是一个开源的消息代理和队列服务器,它使用AMQP(Advanced Message Queuing Protocol)协议,广泛应用于分布式系统中...
为了能够有效地监控 RabbitMQ 的性能和状态,Prometheus 提供了一个名为 `rabbitmq_exporter` 的工具。然而,在某些情况下,官方网站可能不直接提供这个插件,这时我们需要从第三方源获取,例如在本例中提到的 `...
**RabbitMQ基础** RabbitMQ是一个开源的消息代理和队列服务器,用于在分布式系统中进行消息传递。它是基于AMQP(Advanced Message Queuing Protocol)协议实现的,提供了高可用性、可扩展性和稳定性。RabbitMQ的...
RabbitMQ是一款开源的消息队列系统,基于AMQP(Advanced Message Queuing Protocol)协议,用于在分布式系统中高效地路由和传递消息。它由Erlang编程语言开发,因此在安装RabbitMQ之前,需要先安装Erlang环境。本...
1. **下载RabbitMQ**:首先,访问RabbitMQ官方网站下载适用于Windows的RabbitMQ Server安装包。这个压缩包"rabbitMQ_Windows版.zip"很可能包含了所有必要的文件。 2. **解压与安装**:解压缩文件,运行安装程序,...
【标题】:“TP6使用RabbitMQ” 在PHP框架ThinkPHP6(简称TP6)中集成RabbitMQ是一项常见的任务,用于实现异步处理、消息队列和分布式系统的通信。RabbitMQ是一个开源的消息代理和队列服务器,它遵循AMQP(Advanced...
**RabbitMQ与SpringMVC集成** RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)协议实现,广泛应用于分布式系统中的消息传递。RabbitMQ是由Erlang OTP平台构建的,因此...