-
yml配置
spring: rabbitmq: username: admin password: admin host: localhost port: 5672 virtual-host: / publisher-confirm: true #发布确认 开启confirms回调 Producer -> Exchange publisher-returns: true #发布返回 开启returnedMessage回调 Exchange -> Queue listener: type: simple simple: acknowledge-mode: manual #消费端收到消息后的确认方式 manual手动确认 none自动确认 prefetch: 1 #消费者预取1条数据到内存 default-requeue-rejected: false #决定被拒绝的消息是否重新入队。默认值为true,需要手动basicNack时这些参数谅失效了 retry: enabled: true #开启消费者 程序异常情况下会进行重试 max-attempts: 3 #重试次数 initial-interval: 2000 #消费者重试间隔次数 2s
-
RabbitConfig
@Autowired private CachingConnectionFactory connectionFactory; /** * rabbitTemplate * @return */ @Bean public RabbitTemplate rabbitTemplate() { RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); rabbitTemplate.setMessageConverter(converter()); //消息是否成功发送到Exchange rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> { if (ack) { log.info("消息成功发送至Exchange"); } else { log.info("消息发送到Exchange失败, {}, cause: {}", correlationData, cause); } }); //触发setReturnCallback回调必须设置mandatory=true, 否则Exchange没有找到Queue就会丢弃掉消息, 而不会触发回调 rabbitTemplate.setMandatory(true); //失败回调 消息是否从Exchange路由到Queue (只有消息从Exchange路由到Queue失败才会回调这个方法) rabbitTemplate.setReturnsCallback(returned -> log.info("消息从Exchange路由到Queue失败: exchange: {}, route: {}, replyCode: {}, replyText: {}, message: {}", returned.getExchange(), returned.getRoutingKey(), returned.getReplyCode(), returned.getReplyText(), returned.getMessage()) ); return rabbitTemplate; } @Bean public Jackson2JsonMessageConverter converter() { return new Jackson2JsonMessageConverter(); } /** * 普通队列交换机 */ @Bean public FanoutExchange testFanoutExchange() {
SpringBoot集成RabbitMQ实现消息重试机制,消息重试3次失败后写入死信队列,消息重试3次失败后入库
本文介绍了如何在SpringBoot应用中集成RabbitMQ,设置消息重试机制,当消息重试3次失败后将其放入死信队列,并在3次重试失败后将消息存入数据库。配置包括yml文件,RabbitConfig配置,消息实体定义,生产者和消费者实现。通过控制器和Postman进行测试,观察控制台输出及数据库变更。
摘要由CSDN通过智能技术生成