如何将消息从 Lambda 回滚到 Amazon MQ (AMQ)?
How do I roll-back a message to Amazon MQ (AMQ) from Lambda?
所以,我假设这与任何 Node.js 和 Active MQ 安装有关,但我使用的是带有 Node.js Lambda 的 Amazon MQ...
ActiveMQ 有点菜鸟所以请纠正我的错误!
使用 stompit
从队列中读取消息后,我继续处理该消息,然后通过 HTTPS 将其发送到另一台服务器。
在通往 HTTPS POST 的途中发生了一些消息验证和丰富,当然 POST 本身可能会导致错误。
如果出现错误,我将如何(最好)处理消息的回滚:
1) 保持连接打开并且不发送 client.ack()
直到我最终从远程服务器返回 HTTP 200?
2) 将消息保存在一个变量中,并在出错时将其放回原位(顺序无关紧要?
3) 使用踩踏以外的东西?
使用 STOMP 显然是不可能的,所以我更改了代码以改用库 ampq10。
import amqp10 from 'amqp10';
const AMQPClient = amqp10.Client;
const amqpClient = new AMQPClient({
receiverLink: {
attach: {
rcvSettleMode: amqp10.Constants.receiverSettleMode.settleOnDisposition
},
creditQuantum: 1
}
});
如果成功处理邮件,这将允许您执行 receiver.accept(message);
。如果您只是 .disconnect()
而没有 .accept()
消息将不会从队列中删除。
所以,我假设这与任何 Node.js 和 Active MQ 安装有关,但我使用的是带有 Node.js Lambda 的 Amazon MQ...
ActiveMQ 有点菜鸟所以请纠正我的错误!
使用 stompit
从队列中读取消息后,我继续处理该消息,然后通过 HTTPS 将其发送到另一台服务器。
在通往 HTTPS POST 的途中发生了一些消息验证和丰富,当然 POST 本身可能会导致错误。
如果出现错误,我将如何(最好)处理消息的回滚:
1) 保持连接打开并且不发送 client.ack()
直到我最终从远程服务器返回 HTTP 200?
2) 将消息保存在一个变量中,并在出错时将其放回原位(顺序无关紧要?
3) 使用踩踏以外的东西?
使用 STOMP 显然是不可能的,所以我更改了代码以改用库 ampq10。
import amqp10 from 'amqp10';
const AMQPClient = amqp10.Client;
const amqpClient = new AMQPClient({
receiverLink: {
attach: {
rcvSettleMode: amqp10.Constants.receiverSettleMode.settleOnDisposition
},
creditQuantum: 1
}
});
如果成功处理邮件,这将允许您执行 receiver.accept(message);
。如果您只是 .disconnect()
而没有 .accept()
消息将不会从队列中删除。