【问题标题】:How do I roll-back a message to Amazon MQ (AMQ) from Lambda?如何将消息从 Lambda 回滚到 Amazon MQ (AMQ)?
【发布时间】:2018-09-01 14:05:54
【问题描述】:

所以,我假设这与任何 Node.js 和 Active MQ 安装有关,但我正在使用带有 Node.js Lambda 的 Amazon MQ...

有点像 ActiveMQ 的菜鸟,所以请纠正我的错误!

使用stompit 从队列中读取消息后,我继续处理该消息,然后将通过 HTTPS 将其发送到另一台服务器。 在前往 HTTPS POST 的过程中会发生一些消息验证和丰富,当然 POST 本身可能会导致错误。

如果出现错误,我将如何(最好)处理消息的回滚:

1) 保持连接打开并且在我最终从远程服务器返回 HTTP 200 之前不发送client.ack()

2) 将消息保存在变量中,并在出错时将其放回(顺序无关紧要?

3) 使用除了 stomp 以外的东西?

【问题讨论】:

  • 不会是message.nack()吗?或者如果不是,client.destroy()(因为服务器应该在断开连接之前重新发送您未确认的任何消息)。

标签: node.js amazon-web-services aws-lambda activemq stomp


【解决方案1】:

显然不可能使用 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(),则消息不会从队列中删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多