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是一个开源的消息代理和队列服务器,广泛用于分布式系统中的消息传递。它基于AMQP(Advanced Message Queuing Protocol)标准,允许应用程序之间异步通信,并提供了高可用性、可扩展性和容错性。RabbitMQ的...
RabbitMQ服务器3.10.5是一款广泛使用的开源消息代理和队列服务器,它基于高级消息队列协议(AMQP)实现。这个版本的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是一款开源的消息队列服务软件,它实现了高级消息队列协议(AMQP),以高性能、健壮和可伸缩性闻名,主要由Erlang语言编写。Erlang是一种适合于构建并发处理能力强、高可用性系统的编程语言,这些特点使得...
标题 "kettle rabbitmq 插件开发" 涉及的是如何在 Pentaho Kettle(也称为 Spoon)中创建和使用 RabbitMQ 插件。Kettle 是一个开源的数据集成工具,它允许用户进行数据抽取、转换和加载(ETL)操作。RabbitMQ 是一个...
**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平台构建的,因此...
**RabbitMQ 默认配置文件模板详解** RabbitMQ是一款开源的消息队列系统,基于AMQP(Advanced Message Queuing Protocol)协议实现,广泛应用于分布式系统中,用于解耦应用程序,提高系统的可扩展性和容错性。在...