首页 文章

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

提问于
浏览
2

关于允许应用程序拒绝哪种消息,是否有良好的最佳实践?

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

当然 - 如果应用程序已经预先知道它将无法处理消息(DB down),它应该停止接受消息 .

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

1 回答

  • 3

    我的回答是关于WebSphere MQ:

    死信队列(简称DLQ)是放置无法传递到目的地的消息的地方 . 消息可以由队列管理器,消息通道代理(MCA)和应用程序放在DLQ上 . DLQ上的所有消息都必须以死信头结构MQDLH作为前缀 . 当队列管理器或MCA放置消息时,MQDLH头会自动修复,而应用程序必须显式地为MQDLH添加前缀 .

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

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

相关问题