操作背景
重试 Topic 是一种为了确保消息被正常消费而设计的 Topic 。当某些消息第一次被消费者消费后,没有得到正常的回应,则会进入重试 Topic 中,当重试达到一定次数后,停止重试,投递到死信 Topic 中。
当消息进入到死信队列中,表示 TDMQ Pulsar 版已经无法自动处理这批消息,一般这时就需要人为介入来处理这批消息。您可以通过编写专门的客户端来订阅死信 Topic,处理这批之前处理失败的消息。
本文以官网提供的 Demo 为例,介绍消息重试与死信队列功能与使用方式。
操作步骤
步骤1. 在控制台新建 Pulsar 资源
1. 登录 TDMQ Pulsar 版控制台,创建一个集群和命名空间。
2. 在左侧导航栏选择 Topic 管理页签,当前集群和命名空间分别勾选入门课程中创建好的集群和命名空间。
3. 单击新建,输入 Topic 名称和说明,其他选项可保持默认,单击保存,创建一个 topic。
![](https://qcloudimg.tencent-cloud.cn/image/document/9f4a0f5f1ccb2dd5945c278d4d9b01ab.png)
4. 单击新建好的 Topic 操作列的新增订阅,输入订阅名称,开启自动创建重试&死信队列,重试和死信默认后缀选择 Pulsar 社区版(大写),为刚新建好的 Topic 创建一个订阅关系并开启重试&死信队列。
![](https://qcloudimg.tencent-cloud.cn/image/document/b45f89a351cd01e3e8efa53d49ccf30e.png)
5. 提交后,可以看到系统自动创建好的重试队列和死信队列。
![](https://qcloudimg.tencent-cloud.cn/image/document/84c7a9abb964e5b10809e18465e37d90.png)
6. 单击操作列的更多 > 查看订阅/消费者,可看到刚创建好的订阅。
![](https://qcloudimg.tencent-cloud.cn/image/document/410d5a415a9f1da9dc92c2beb8dee1fa.png)
步骤2. 下载 Demo 并配置相关参数
1. 下载官方 Demo并解压。
![](https://qcloudimg.tencent-cloud.cn/image/document/f4d54f1a3d54025ef4943d3fc0b4dd47.png)
2. 修改 Constant.java 参数。
![](https://qcloudimg.tencent-cloud.cn/image/document/c33e69681a0d723930520068ea7ef46f.png)
参数 | 说明 |
SERVICE_URL | 集群接入地址,可以在控制台集群管理页面查看并复制。 ![]() |
AUTHENTICATION | 角色的密钥,角色密钥可以在角色管理中复制。 ![]() |
步骤3. 生产消息
1. 进入/deadletter目录下,修改 SimpleProducer.java 参数。
![](https://qcloudimg.tencent-cloud.cn/image/document/bba736c3ec6d91953116a4a0216aef9a.png)
topic:填写创建好的 topic 名称,需要填入完整路径,即persistent://clusterid/namespace/Topic,clusterid/namespace/topic 的部分可以从控制台上 Topic管理页面直接复制。
![](https://qcloudimg.tencent-cloud.cn/image/document/eeeee526eeff56ee7d24783dee5be57a.png)
2. 编译并运行 SimpleProducer.java 程序发送消息。运行结果如下:
![](https://qcloudimg.tencent-cloud.cn/image/document/3b06756d10d3125fedd52ec55733e964.png)
3. 登录 TDMQ Pulsar 版控制台,在消息查询页面,可以看到向 topic 中生产的消息。
![](https://qcloudimg.tencent-cloud.cn/image/document/257182f4863e69687008f1217acc89fa.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/257182f4863e69687008f1217acc89fa.png)
步骤4. 消费消息
1. 修改 RetryConsumer.java 程序参数。
![](https://qcloudimg.tencent-cloud.cn/image/document/d8bcf0cf86e983efb363a96f95b6b50c.png)
.retryLetterTopic:重试topic名称。
.deadLetterTopic:死信topic名称。
.topic:topic名称。
以上3个 topic 需要填入完整路径,即
persistent://clusterid/namespace/Topic
,clusterid/namespace/topic
的部分可以从控制台上 Topic 管理页面直接复制。![](https://qcloudimg.tencent-cloud.cn/image/document/6534d5364eb902629197fdac28085930.png)
.subscriptionName:需要写入订阅名,可在 Topic 消费者界面查看。
![](https://qcloudimg.tencent-cloud.cn/image/document/4a0b698949842a19a74c7d1dd37194d3.png)
2. 编译并运行消息重试程序 RetryConsumer.java 。运行结果如下:
![](https://qcloudimg.tencent-cloud.cn/image/document/7c63fdaa78f082f154edbcf77bcc62bd.png)
3. 登录 TDMQ Pulsar 版控制台,在消息查询页面可以看到,重试 topic 中展示了2条消息,死信 topic 中展示了1条消息,代表消息经过2次重试投递后,被投递到死信队列。
![](https://qcloudimg.tencent-cloud.cn/image/document/f1a34faa1ee5d7cce6725f8e2cbd67b1.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/f1a34faa1ee5d7cce6725f8e2cbd67b1.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/8839a49b95e98ee284ffe7b56870f0f8.png)
步骤5. 消费死信消息
1. 修改 DeadConsumer.java 参数。
![](https://qcloudimg.tencent-cloud.cn/image/document/edd03174380679eaa810f69e92888f67.png)
.topic:填写死信topic名称, 需要填入完整路径,即
persistent://clusterid/namespace/Topic
,clusterid/namespace/topic
的部分可以从控制台上 Topic 管理页面直接复制。![](https://qcloudimg.tencent-cloud.cn/image/document/77391cf14cb2c87c9994ef400b4085ac.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/77391cf14cb2c87c9994ef400b4085ac.png)
.subscriptionName:需要写入订阅名,可在 Topic 消费者界面查看。
![](https://qcloudimg.tencent-cloud.cn/image/document/9d08402665eb9c1f727b7ca480991a52.png)
2. 编译并运行消息重试程序 RetryConsumer.java 。运行结果如下:
![](https://qcloudimg.tencent-cloud.cn/image/document/78122326cb221f549f54e42b77578914.png)
3. 登录 TDMQ Pulsar 版控制台,在死信 topic 消费者页面,消息堆积量变为0条,证明消息已经被消费。![](https://qcloudimg.tencent-cloud.cn/image/document/8a7b8a2282f3aab59483554366e8d592.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/8a7b8a2282f3aab59483554366e8d592.png)