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

发布时间:2021-11-15 17:13:05 作者:柒染
来源:亿速云 阅读:144

分布式消息服务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}

参数说明请参见下表:

名称

类型

是否必选

说明

取值范围

project_id

string

项目ID。

N/A

queue_id

string

指定的队列ID。

N/A

consumer_group_id

String

消费组的ID。从查看指定队列的所有消费组的响应消息中获取消费组ID。

N/A

max_msgs

int

获取可消费的死信消息的条数。

说明:

单次消费返回的消息数量可能会少于指定条数,但多次消费最终可获取全部消息。

取值范围:1~10。

默认值:10

time_wait

int

设定消费组中可消费的死信为0时的读取消息等待时间。

如果在等待时间内有新的死信消息,则立即返回消费结果,如果等待时间内没有新的死信消息,则到等待时间后返回消费结果。

取值范围:1~60s

默认值:3s

说明:不带该参数或者配置为空,都默认为3s。

ack_wait

int

commit提交超时时间,在该时间内提交确认,确认有效,如果超过指定时间,系统会报消息确认超时,或handler无效。

取值范围:15~300s

默认值:30s

说明:不带该参数或者配置为空,都默认为30s。

响应参数

参数

类型

描述

message

JSON对象

消息的内容

handler

string

消息handler

message参数

参数

类型

描述

body

JSON

消息体的内容。

attributes

JSON对象

属性的列表。

 

 

如何确认已消费死信消息

在消费者消费死信消息期间,死信消息仍然停留在队列中,但死信消息从被消费开始的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

参数说明请参见下表:

名称

类型

是否必选

说明

project_id

string

项目ID。

queue_id

string

队列ID。

consumer_group_id

string

消费组ID。

 

请求参数和message参数如下表所示:

名称

类型

是否必选

说明

message

array

确认消息数组。

 

名称

类型

是否必选

说明

handler

string

消费时返回的ID。

status

string

客户端处理数据的状态。

取值为“success”或者“fail”。

 

响应参数

响应参数如下表所示:

参数

类型

描述

success

int

确认成功的数目(如果为N,则表示前N条死信消息确认成功)。

fail

int

确认失败的数目(如果为N,则表示后N条死信消息确认失败)。

看完上述内容,你们掌握分布式消息服务DMS如何实现死信消息的消费的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. 消费端如何保证消息队列MQ的有序消费
  2. 消息服务中如何确保消息至少被消费一次

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

dms

上一篇:如何使用go监控方案的statsd

下一篇:如何在CentOS7部署和设置GO

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》