当前位置: 首页 > wzjs >正文

建设银行信用卡网站查询申请自媒体账号入口

建设银行信用卡网站查询,申请自媒体账号入口,免费注册自助网站,两个域名 两个网站 如何推广6.异常处理 文章目录 6.异常处理1.异常分类与处理原则2.生产者异常处理1. 同步发送捕获异常2. 异步发送回调处理 3.消费者异常处理1.全局异常处理器2.方法级处理3.重试yml配置 4.死信队列(DLQ)配置1. 启用死信队列2. 手动发送到DLQ 5.事务场景异常处理1.…

6.异常处理

文章目录

  • 6.异常处理
      • 1.异常分类与处理原则
      • 2.生产者异常处理
        • 1. 同步发送捕获异常
        • 2. 异步发送回调处理
      • 3.消费者异常处理
        • 1.全局异常处理器
        • 2.方法级处理
        • 3.重试yml配置
      • 4.死信队列(DLQ)配置
        • 1. 启用死信队列
        • 2. 手动发送到DLQ
      • 5.事务场景异常处理
        • 1. 声明式事务
        • 2. 事务异常回滚
      • 6.监控与告警
        • 1. Actuator 健康检查
        • 2. Prometheus 指标
      • 7.完整异常处理流程
      • 8.最佳实践总结

来源参考的deepseek,如有侵权联系立删

1.异常分类与处理原则

异常类型典型场景处理建议
可恢复异常网络抖动、数据库锁冲突重试机制(有限次数 + 退避策略)
不可恢复异常消息格式错误、权限不足直接记录日志并进入死信队列
事务异常事务超时、生产者ID冲突终止事务并回滚操作

2.生产者异常处理

1. 同步发送捕获异常
public void sendSync(String topic, String message) {try {ListenableFuture<SendResult<String, String>> future = kafkaTemplate.send(topic, message);future.get(5, TimeUnit.SECONDS); // 阻塞等待结果} catch (InterruptedException | ExecutionException | TimeoutException e) {// 记录日志并触发补偿逻辑log.error("消息发送失败: {}", e.getMessage());throw new BusinessException("消息发送失败", e);}
}
2. 异步发送回调处理
public void sendAsync(String topic, String message) {kafkaTemplate.send(topic, message).addCallback(result -> {// 发送成功处理log.info("消息发送成功: topic={}", result.getRecordMetadata().topic());},ex -> {// 发送失败处理log.error("消息发送失败", ex);if (ex instanceof RetriableException) {// 可重试异常(如网络问题)retrySend(topic, message);} else {// 不可重试异常(如消息过大)deadLetterService.saveToDlq(topic, message);}});
}

3.消费者异常处理

1.全局异常处理器
@Configuration
public class KafkaGlobalErrorConfig {// 定义全局错误处理器(支持批量/单消息模式)@Beanpublic CommonErrorHandler globalErrorHandler(KafkaTemplate<String, Object> template) {// 重试策略:3次重试,间隔5秒DefaultErrorHandler handler = new DefaultErrorHandler(new DeadLetterPublishingRecoverer(template), // 死信队列恢复器new FixedBackOff(5000L, 3));// 指定可重试异常类型handler.addRetryableExceptions(NetworkException.class);handler.addNotRetryableExceptions(SerializationException.class);// 偏移量提交策略handler.setCommitRecovered(true);return handler;}// 容器工厂绑定全局处理器@Beanpublic ConcurrentKafkaListenerContainerFactory<String, Object> kafkaListenerContainerFactory(ConsumerFactory<String, Object> consumerFactory,CommonErrorHandler globalErrorHandler) {ConcurrentKafkaListenerContainerFactory<String, Object> factory =new ConcurrentKafkaListenerContainerFactory<>();factory.setConsumerFactory(consumerFactory);factory.setCommonErrorHandler(globalErrorHandler);return factory;}
}
2.方法级处理
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.listener.ConsumerAwareListenerErrorHandler;
import org.springframework.kafka.support.KafkaHeaders;
import org.springframework.kafka.support.serializer.DeserializationException;@Slf4j
@Configuration
public class KafkaExceptionConfig {/*** 自定义异常处理器*/@Beanpublic ConsumerAwareListenerErrorHandler orderErrorHandler() {return (message, exception, consumer) -> {// 业务相关错误处理(如库存不足)/*   if (exception instanceof InventoryException) {retryService.scheduleRetry(message.getPayload());}*/System.out.println("异常执行:"+exception);return null;};}/*** 注册全局异常处理器*/@Beanpublic ConsumerAwareListenerErrorHandler globalExceptionHandler() {return (message, exception, consumer) -> {log.error("捕获消费异常: topic={}, message={}",message.getHeaders().get(KafkaHeaders.RECEIVED_TOPIC),message.getPayload(),exception);// 反序列化异常特殊处理if (exception.getCause() instanceof DeserializationException) {// 跳过错消息并提交偏移量return null;}throw exception; // 其他异常继续抛出};}}
    @KafkaListener(topics = "test", groupId = "spring-group",errorHandler = "globalExceptionHandler")public void listenBatch(List<String> messages, Acknowledgment ack) {messages.forEach(msg -> System.out.println("批量消息:" + msg));//异常测试int i = 1/0;ack.acknowledge();}
3.重试yml配置
spring:kafka:listener:retry:max-attempts: 3               # 最大重试次数backoff:initial-interval: 1000     # 初始间隔(毫秒)multiplier: 2.0            # 间隔倍数exclude-exceptions:          # 不重试的异常- javax.validation.ValidationException

4.死信队列(DLQ)配置

1. 启用死信队列
spring:kafka:listener:dead-letter-publish:enable: true                  # 自动发布到死信队列dead-letter-topic: dlq-${topic} # 死信队列命名规则
2. 手动发送到DLQ
@KafkaListener(topics = "payments")
public void handlePayment(PaymentEvent event, Acknowledgment ack) {try {paymentService.process(event);ack.acknowledge();} catch (InvalidPaymentException ex) {// 手动发送到DLQkafkaTemplate.send("dlq-payments", event);ack.acknowledge(); // 避免重复消费}
}

5.事务场景异常处理

1. 声明式事务
@Transactional
public void processWithTransaction(Order order) {// 数据库操作orderRepository.save(order);// Kafka事务消息kafkaTemplate.send("orders", order.toEvent());// 其他业务...
}
2. 事务异常回滚
@Bean
public KafkaTransactionManager<String, Object> transactionManager(ProducerFactory<String, Object> pf) {return new KafkaTransactionManager<>(pf);
}@Transactional(rollbackFor = {KafkaException.class, SQLException.class})
public void transactionalProcess() {// 数据库与Kafka操作
}

6.监控与告警

1. Actuator 健康检查
management:endpoints:web:exposure:include: health,kafkahealth:kafka:enabled: true
2. Prometheus 指标
@Bean
public MicrometerConsumerListener<K, V> consumerMetrics() {return new MicrometerConsumerListener<>("kafka.consumer");
}@Bean
public MicrometerProducerListener<K, V> producerMetrics() {return new MicrometerProducerListener<>("kafka.producer");
}

7.完整异常处理流程

  1. 捕获异常 → 2. 分类判断 → 3. 重试/记录/DLQ → 4. 提交Offset → 5. 监控告警

8.最佳实践总结

  • 分层处理:全局处理器兜底 + 方法级精细控制
  • 幂等消费:确保消息重复消费时的数据安全性
  • 监控覆盖:跟踪重试次数、DLQ堆积等关键指标
  • 事务隔离@Transactional + read_committed 保证数据一致性

文章转载自:

http://ofIleswn.jykzy.cn
http://dSMFjE9g.jykzy.cn
http://lvfF8OAa.jykzy.cn
http://uLwlXRhk.jykzy.cn
http://TeOyLNeP.jykzy.cn
http://PcHS3JfU.jykzy.cn
http://K7M9pSAg.jykzy.cn
http://iR3lw1OJ.jykzy.cn
http://YkFBRCC7.jykzy.cn
http://Ufy77vfS.jykzy.cn
http://h2NwLjwf.jykzy.cn
http://8l6JTCdn.jykzy.cn
http://tDz7qJwu.jykzy.cn
http://s6wHxsPf.jykzy.cn
http://sccMDWYy.jykzy.cn
http://tcgFeG3A.jykzy.cn
http://zuSI11xV.jykzy.cn
http://h6pxBXel.jykzy.cn
http://rNKiJ431.jykzy.cn
http://HkjfrqLb.jykzy.cn
http://lz3GDnxn.jykzy.cn
http://tzlNr1vA.jykzy.cn
http://nR48Ylfd.jykzy.cn
http://4TrncTit.jykzy.cn
http://ZhMiDx1H.jykzy.cn
http://I8gBvvIU.jykzy.cn
http://o3dBIDPG.jykzy.cn
http://aXMYzRxo.jykzy.cn
http://BAHeZbiE.jykzy.cn
http://zsGJ8slW.jykzy.cn
http://www.dtcms.com/wzjs/623784.html

相关文章:

  • 提高整个网站权重新手做自己的网站
  • 房产网站系统源码wordpress 根据ua跳转
  • 网站制作公司网站超链接
  • 做网站设计是什么专业网页设计实训报告参考文献
  • 做学校网站素材图片网络运行维护
  • 淘宝网站怎么做的好看郑州妇科
  • 手机网站开发源码品牌推广岗位
  • seo快速排名网站优化白山网站制作
  • 建设部作业证件查询官方网站视频手机网站开发
  • 网站推广计划书包含哪些内容西安网站设计西安搜推宝
  • 专业的制作网站开发公司类似于wordpress的网站吗
  • 完整的app网站开发鞋 东莞网站建设 技术支持
  • wordpress域名网站搬家济南网站建设认可搜点网络
  • 外贸开发网站公司百度信息流怎么做效果好
  • 国内最大的c2c网站html网页设计步骤
  • 网站列表怎么做wordpress开发工作流
  • 建设一个普通的网站需要多少钱seo问答
  • 这个是以前我自己做的一个网站新闻发布会发言稿范文
  • 枣庄手机网站开发网页设计图片透明度怎么设置
  • 深圳市南山区住房和建设局官方网站校园网络设计报告
  • 喀什网站建设公司网站怎么显示备案号
  • 九口袋网站建设阳山做网站
  • 包装袋设计网站推荐为什么建设文化馆网站
  • 学校网站首页制作jsp网站建设项目
  • 淘宝网站建设图片素材建设学院网站意义
  • 建网站需要什么要求彩页设计教程
  • window2008 网站建设免费的ppt通用模板
  • 建设摩托官方网站自媒体全平台发布
  • 徽与章网站建设宗旨青岛做网站青岛做网站
  • 写一个网站需要什么技术哪里有放网站的免费空间