关于允许应用程序拒绝什么样的消息,是否有一个好的最佳实践?
我的理解是,所有无法处理的消息都应该被拒绝到死信队列——无论问题是消息中的语法错误还是语义错误,或者应用程序暂时无法处理消息(例如因为数据库刚刚关闭)。
当然 - 如果应用程序已经预先知道它将无法处理消息(DB 关闭),它应该停止接受消息。
那么常见的理解/最佳实践是什么?
关于允许应用程序拒绝什么样的消息,是否有一个好的最佳实践?
我的理解是,所有无法处理的消息都应该被拒绝到死信队列——无论问题是消息中的语法错误还是语义错误,或者应用程序暂时无法处理消息(例如因为数据库刚刚关闭)。
当然 - 如果应用程序已经预先知道它将无法处理消息(DB 关闭),它应该停止接受消息。
那么常见的理解/最佳实践是什么?
我的回应是关于 WebSphere MQ:
死信队列(简称 DLQ)是放置无法传递到目的地的消息的地方。队列管理器、消息通道代理 (MCA) 和应用程序可以将消息放在 DLQ 上。DLQ 上的所有消息都必须以死信头结构 MQDLH 为前缀。当队列管理器或 MCA 放置消息时,MQDLH 标头会自动修复,而应用程序必须显式地为 MQDLH 添加前缀。
就应用程序而言,如果他们无法处理消息,例如不理解消息格式,他们可以将消息放入 BACKOUT 队列而不是 DLQ。BACKOUT 队列就像任何普通队列一样,可以放置被应用程序拒绝的消息。BACKOUT 队列的优点是您可以在每个队列的基础上指定一个 BACKOUT 队列,并且放置在那里的消息不需要以 MQDLH 标头为前缀。
可以编写应用程序以从 BACKOUT 读取消息并将它们按原样路由回目标队列。但是,DLQ 中的消息需要额外的处理才能在将它们放入目标队列之前删除 MQDLH。