error-handling - 什么属于 DLQ/无效消息队列?

标签 error-handling rabbitmq activemq ibm-mq mq

关于允许应用程序拒绝什么样的消息,是否有一个好的最佳实践?

我的理解是所有无法处理的消息都应该被拒绝到死信队列 - 无论问题是消息中的语法错误还是语义错误,或者应用程序是否暂时无法处理消息(例如,因为数据库刚刚下降)。

当然 - 如果应用程序已经预先知道它将无法处理消息(数据库关闭),它应该停止接受消息。

那么什么是共同的理解/最佳实践?

最佳答案

我的回答是关于 WebSphere MQ:

死信队列(简称 DLQ)是一个放置无法传递到目的地的消息的地方。消息可以由队列管理器、消息 channel 代理 (MCA) 和应用程序放置在 DLQ 上。 DLQ 上的所有消息都必须以死信 header 结构 MQDLH 为前缀。当队列管理器或 MCA 放置消息时,MQDLH header 会自动修复,而应用程序必须明确地为 MQDLH 加上前缀。

就应用程序而言,如果它们无法处理消息,例如无法理解消息格式,它们可以将消息放入 BACKOUT 队列而不是 DLQ。 BACKOUT 队列就像任何普通队列一样,可以放置被应用程序拒绝的消息。 BACKOUT 队列的优点是您可以在每个队列的基础上指定一个 BACKOUT 队列,并且放置在那里的消息不需要带有 MQDLH header 前缀。

可以编写一个应用程序来读取来自 BACKOUT 的消息并将它们按原样路由回目标队列。但是,DLQ 中的消息需要额外的处理才能在将它们放入目标队列之前移除 MQDLH。

关于error-handling - 什么属于 DLQ/无效消息队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16936320/

相关文章:

python - 从 python 中关闭文件

javascript - 当(触发)控制台显示错误时显示或隐藏 Div

node.js - NodeJs +请求 promise -错误捕获

spring - 当 MessageListener 抛出异常时,RabbitMQ 监听器停止监听消息

architecture - 已发布并等待对 RabbitMQ/EasyNetQ 主题的回应 - 如何只获得你的?

django - celery worker 仅在未分离时导入任务

ssl - ActiveMQ SSL - 在没有重启代理的情况下重新加载信任库

java - 如何优化activemq

java - 您会使用发布/订阅或队列来进行长时间运行的后台进程吗?

python - 使用字典处理Python错误的方式