问题标签 [dead-letter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jms - Spring JMS 和 ActiveMQ 在哪里查看死信队列中的消息
这是我的配置:
这是我的消费者:
因此,我将有效负载 =“启动”的消息放入队列中。
我想测试事务,如果有效负载等于“启动”,它会抛出异常。
所以感谢 redeliverypolicy,消费者尝试消费消息 5 次。在 ActiveMq 队列列表中的第五个之后,我没有看到我发送的消息。
消息放在哪里?在死信队列中?在哪里可以看到带有“启动”消息的死信队列?
谢谢。
scala - Akka log-dead-letters 和 log-dead-letters-during-shutdown 不起作用
这是一个简单的问题,但它一直困扰着我和我的日志。
我有一个配置:
我的程序以akkaSystem.terminate()
我很确定配置已加载到系统中。我尝试了不同的组合,用false
or0
代替off
. 没有任何帮助,当计划的工作人员每 10 分钟停止一次时,我的日志中就会充满死信。
这适用于开发和生产环境。
scala - 使用 Akka HTTP 客户端和 Akka Streams 的死信
我正在尝试使用 Akka HTTP 和 Akka Streams 来运行刮板。我从一堆索引页面开始,从中解析链接,然后获取每个链接并解析该页面,以返回一堆单独的链接。所以,像这样:
我的问题是我什至无法获取单个页面。我尝试获取的每个顶级 URL 都会导致一个死信,并且没有任何东西可以让它更进一步。
在这个示例代码中,我要做的就是发送HttpRequest
到池中以转换为HttpResponse
,并通过将内容打印到屏幕来证明它有效。
这是我得到的:
我是 Akka 的新手,显然犯了一些基本错误,因为这似乎是 Akka、Akka Streams 和 Akka HTTP 构建的确切用例。
有任何想法吗?
amazon-web-services - 有没有办法在特定条件下从 AWS lambda 函数内部将事件消息显式发送到死信队列?
我正在尝试通过调用 AWS lambda 函数向 rabbitmq 发送 s3event 消息。我已将 SQS 配置为我的死信队列 (DLQ)。我知道当调用 lambda 失败或超时或资源限制等情况时,消息会发送到 DLQ。我的问题是,我想在特定条件下从 lambda 函数内部向 DLQ 发送事件消息,例如 rabbitmq 是否关闭或我感兴趣的其他一些条件。有没有相同的可能性?我应该抛出异常还是有其他更好的方法可以将事件消息发送到 DLQ。
我正在使用 java 进行开发并从我的 lambda 函数连接到 rabbitmq。
java - 带有 spring-kafka 的 Kafka 死信队列 (DLQ)
使用 spring-kafka 2.1.x 在 Spring Boot 2.0 应用程序中实现死信队列 (DLQ)概念的最佳方法是什么,以便将某些 bean 的@KafkaListener方法未能处理的所有消息发送到某个预定义的 Kafka DLQ 主题并且不会丢失单个消息?
所以消耗的 Kafka 记录是:
- 成功处理,
- 处理失败,发送到DLQ主题,
- 处理失败,未发送到DLQ主题(由于意外问题),因此将再次被侦听器消费。
我尝试使用 KafkaTemplate 将ErrorHandler发送记录的自定义实现创建为无法处理到 DLQ 主题的侦听器容器。使用禁用的自动提交和RECORD AckMode。
似乎这个实现并不能保证 item #3。如果在 DlqErrorHandler 中抛出异常,则监听器不会再次消费该记录。
使用事务性侦听器容器会有帮助吗?
有没有使用 Spring Kafka 实现 DLQ 概念的便捷方法?
更新 2018/03/28
感谢 Gary Russell 的回答,我能够通过如下实现 DlqErrorHandler 来实现所需的行为
这样,如果消费者轮询返回 3 条记录(1、2、3)并且无法处理第二条记录:
- 1 将被处理
- 2 将无法处理并发送到DLQ
- 3 感谢消费者 seek to record.offset() + 1,它将被传递给监听器
如果发送到 DLQ 失败,消费者会寻找 record.offset() 并且记录将被重新传递给侦听器(并且发送到 DLQ 可能会被停用)。
更新 2021/04/30
由于 Spring Kafka 2.7.0原生支持非阻塞重试和死信主题。
查看示例:https ://github.com/evgeniy-khist/spring-kafka-non-blocking-retries-and-dlt
重试通常应该是非阻塞的(在单独的主题中完成)并延迟:
rabbitmq - 让 RabbitMq 按我的意愿行事(死信和错误重新排队)
我有一个简单的兔子设置,目前正在做我想做的事......
它根据消息的类型发布消息。每种类型都有自己的队列。
当消息发布时,即使没有消费者消费它们,它们也会坐在队列中(如果没有消费者到达,则永远坐在那里)。
当消费者在那里(只有一个!)时,它会吃掉消息。
如果由于某种原因它无法处理消息(例如,它在父消息到达之前获得子消息)它会将nack
消息返回到队列中。
如果它看到相同的消息六次,它nack
就是该消息。
这一切都有效,但目前在六次尝试后它会丢弃消息。
我想要的是将消息传递到“死信队列”,并在一段时间后(比如 5 分钟)将该消息重新排队到它来自的特定队列的末尾。
我绝对是货物崇拜程序,我不太了解所有的交换/队列/绑定/路由键和其他涉及的奥秘......感谢手持!
ISendable
只需确保消息具有一些属性,用于在Data.MarkAsSent(message);
我们拥有的数据库中进行标记。
接收器有一个类似的代码块来处理每种类型。正如我所说,这是有效的。
我需要做什么来添加死信队列的东西?
我这样的尝试创建了死信队列,但没有任何东西移动到它们。
在我的接收器中,我有这个魔力
呼...很多代码。谢谢,如果你已经做到了这一步......
我在问我的代码中有哪些明显的问题使事情落入死信队列。
以及我需要添加什么额外内容,以便 dlq 中的内容在一段时间后反弹回主队列。此外,这为每种类型的队列设置了一个 dlq……这是必需的还是应该有一个队列来保存错误消息?
java - 从一个队列推到另一个队列后如何拒绝消息?
使用 Spring 和 RabbitMQ,我设置了两个主题交换x
和dlx
两个队列q
和dlq
. q
绑定到x
并且dlq
到dlx
。dlx
被配置为死信交换q
。
当一条消息q
被拒绝(取消队列)时,它会成功发送到dlx
,然后发送到dlq
。
现在我使用 shovel-plugin 将死信消息dlq
移回q
. 只要这次成功处理了消息(ack),这就会成功。
但是,如果这些铲入的消息之一q
再次被拒绝,它就会被静默丢弃。我希望它会再次发送到 DLX dlx
。是我配置错误还是误解了 DLX 或铲子的概念?
amazon-web-services - AWS SQS Boto3 手动将消息发送到死信
所以我正在构建一个使用 SQS 的小型应用程序。我有一个简单的处理程序进程,它确定给定消息是否被视为已处理、标记为重试(重新排队)或无法处理(应发送到死信)。
然而,根据文档,似乎真正向 DL 发送消息的唯一方法是使用重新驱动策略,该策略在接收到消息的次数上运行。由于我的应用程序的性质,如果我的进程还没有准备好处理给定的消息,我可以进行几次有效的重试,但有时我可能想要对我刚刚收到的消息进行 DL。AWS/Boto3 是否不提供为 DL 标记特定消息的方法?
我知道我可以自己将消息发送到另一个我认为是我自己的 DL 的队列,我宁愿为此使用 AWS 的内置工具。
spring - MQ 消息在目标、回退和死信队列之间不断循环
我有一个队列 Q1,它的回退队列为 QB,回退阈值为 3。我正在研究处理有害消息的各种可能性,所以每当我从队列中读取消息并继续轮询队列时,我都会让我的应用程序抛出异常。Q1 的深度为 15,QB 为 5,DLQ 为 5。对于第一个场景,我在 Q1 中输入了 7 条消息并启动了应用程序。正如预期的那样,当回退计数为 3 时,每条消息都回滚到队列并移动到回退队列。在第六条消息期间,由于 QB 已满,消息移动到 DLQ,第七条消息也是如此。迷人地工作。
对于第二种情况,我需要知道当回退队列和 DLQ 都已满时会发生什么,我输入了 12 条消息并启动了应用程序,对于前 10 条消息,一切都按预期工作,5 条在回退中,5 条在 DLQ 中。接下来,它会抛出 DLQ is full 这很明显。
但是我在 MQ 资源管理器中可以观察到,这 12 条消息只是在 Q1、QB 和 DLQ 之间无限循环,当我自己停止应用程序时,所有消息都像我启动应用程序之前一样在 Q1 中结束。
完全困惑,谷歌搜索了很多,但没有找到类似的东西。
谁能指出我做错了什么或这个难题中缺少什么。
提前致谢。
java - 无法在类 org.apache.camel.builder.DeadLetterChannelBuilder 上找到属性描述符 useOriginalBody
我正在尝试使用 deadLetterChannelBuilder 但找不到正确的属性。有谁知道它们是什么或在哪里可以找到它们?文档中的那个似乎不起作用。?
无法在类 org.apache.camel.builder.DeadLetterChannelBuilder 上找到属性描述符 useOriginalBody
我也尝试过 allowUseOriginalMessage 但正如预期的那样,它不是 deadLetterChannelBuilder 属性。