網站首頁 編程語言 正文
當消息消費重試達到閾值后,將不再投遞到消費者,而是存于名為"%DLQ%消費者組名"主題中為死信消息。
死信消息解決方案:
A、通過業務控制避免死信消息,當重試次數大于自定義時,將消息記錄到特定位置或通知人工處理并完成消費,該方案使用較多。
@Test
void testConsumer() throws Exception {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("retry-consumer-group");
consumer.setNamesrvAddr(MQConstant.NAME_SRV_ADDR);
consumer.subscribe("retryTopic", "*");
consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
MessageExt messageExt = msgs.get(0);
System.out.println(new Date() + "----" + new String(messageExt.getBody()) + "----" + messageExt.getReconsumeTimes());
try {
// 業務處理
int num = 10/0;
} catch (Exception e) {
// 控制重試,當重試次數大于自定義時,將消息記錄到特定位置或通知人工處理并成功消費
int reconsumeTimes = messageExt.getReconsumeTimes();
if (reconsumeTimes < 3) {
// 重試
return ConsumeConcurrentlyStatus.RECONSUME_LATER;
}
// 不再重試
System.out.println("將消息記錄到特定位置或通知人工處理!");
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
});
consumer.start();
System.in.read(); // 使用系統輸入阻塞掛起JVM
}
B、消費死信主題消息,將消息記錄到特定位置或通知人工處理并完成消費,但對于過多的死信主題則需要很多的消費者,該方案使用較少。
@Test
void testConsumerDead() throws Exception {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("dead-consumer-group");
consumer.setNamesrvAddr(MQConstant.NAME_SRV_ADDR);
// 訂閱死信消息
consumer.subscribe("%DLQ%retry-consumer-group", "*");
consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
// 業務處理
MessageExt messageExt = msgs.get(0);
System.out.println(new Date() + "----" + new String(messageExt.getBody()) + "----" + messageExt.getReconsumeTimes());
System.out.println("死信消息記錄到特定位置或通知人工處理!");
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
});
consumer.start();
System.in.read(); // 使用系統輸入阻塞掛起JVM
}
原文鏈接:https://blog.csdn.net/m0_62129859/article/details/134917433
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-11-14 值類型和引用類型的區別 I 數據結構中的堆和棧和內存中的堆和棧的區別
- 2022-07-15 SQL?Server中執行動態SQL_MsSql
- 2023-06-18 深入了解Golang中的Slice底層實現_Golang
- 2022-08-23 Selenium多窗口切換解決方案_python
- 2022-02-16 向一組數組對象中,添加新的屬性值。和判斷這個數組對象中,某個屬性是否值都一樣
- 2022-09-08 pandas中的Timestamp只保留日期不顯示時間_python
- 2022-08-25 Python并行編程多線程鎖機制Lock與RLock實現線程同步_python
- 2023-01-07 Python源碼加密與Pytorch模型加密分別介紹_python
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支