分布式消息服务DMS如何实现死信消息的消费

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式消息服务DMS如何实现死信消息的消费相关的知识,希望对你有一定的参考价值。

本文部分内容节选自华为云帮助中心的分布式消息服务(DMS)服务的产品介绍


死信消息是什么
死信消息是指无法被正常消费的消息。分布式消息服务DMS支持对消息进行异常处理。当消息进行多次重复消费仍然失败后,DMS会将该条消息转存到死信队列中,有效期为72小时,用户可以根据需要对死信消息进行重新消费。消费死信消息时,只能消费该消费组产生的死信消息。全局有序的普通队列的死信消息依然按照先入先出(FIFO)的顺序存储在死信队列中。


如何消费死信消息
消费指定消费组产生的死信消息。可同时消费多条消息,每次消费的消息负载不超过512KB。仅NORMAL队列和FIFO队列可以开启死信消息,因为只有NORMAL队列和FIFO队列可消费死信消息。


URI

GET /v1.0/{project_id}/queues/{queue_id}/groups/{consumer_group_id}/deadletters?max_msgs={max_msgs}&time_wait={time_wait}&ack_wait={ack_wait}


参数说明请参见下表:
技术分享图片



技术分享图片



技术分享图片


如何确认已消费死信消息
在消费者消费死信消息期间,死信消息仍然停留在队列中,但死信消息从被消费开始的30秒内不能被该消费组再次消费,若在这30秒内没有被消费者确认消费,则DMS认为死信消息未消费成功,将可以被继续消费。


如果死信消息被确认消费成功,该死信消息将不能被该消费组再次消费,死信消息的保留时间为72小时(除非消费组被删除),72小时后会被删除。


消息批量消费确认时,必须严格按照消息消费的顺序提交确认,DMS按顺序判定消息是否消费成功,如果某条消息未确认或消费失败,则不再继续检测,默认后续消息全部消费失败。建议当对某一条消息处理失败时,不再需要继续处理本批消息中的后续消息,直接对已正确处理的消息进行确认。


注意,仅NORMAL队列和FIFO队列可以开启死信消息,因为只有NORMAL队列和FIFO队列可消费死信消息。

URI

POST /v1.0/{project_id}/queues/{queue_id}/groups/{consumer_group_id}/deadletters/ack



技术分享图片


技术分享图片


技术分享图片


技术分享图片


以上就是对分布式消息服务DMS如何实现死信消息的消费的介绍,想要了解更多,欢迎点击分布式消息服务DMS查看。

以上是关于分布式消息服务DMS如何实现死信消息的消费的主要内容,如果未能解决你的问题,请参考以下文章

消息队列属性及常见消息队列介绍

分布式消息服务DMS与开源Kafka对比

分布式消息服务DMS与开源Kafka对比

消费者实现应用内分布式事务

rabbitmq~消息失败后重试达到 TTL放到死信队列(事务型消息补偿机制)

分布式消息通信之RabbitMQ_01