赞
踩
如果不做任何处理,当消费消息时出现异常,默认会不断的重试,这显然不是我们希望的
我们希望的是:可以指定重试的次数,重试完了之后进入死信队列,然后就可以人为的对死信队列进行处理
需要将一个Queue关联死信队列的Exchange和RoutingKey
package com.wcong.config; import org.springframework.amqp.core.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @author wcong * @version 1.0 * @date 2020-07-30 21:01 */ @Configuration public class EmailDlConfig { /** * 正常的消息消息交换机 * @return */ @Bean public DirectExchange emailExchange(){ return new DirectExchange("EmailExchange"); } /** * 用来做死信队列的交换机 * @return */ @Bean public DirectExchange emailDlExchange(){ return new DirectExchange("emailDlExchange"); } /** * 正常的Queue,关联死信队列的Exchange和RoutingKey * @return */ @Bean public Queue emailQueue(){ return QueueBuilder.durable("emailQueue") // 关联死信队列的交换机和RoutingKey .withArgument("x-dead-letter-exchange","emailDlExchange") .withArgument("x-dead-letter-routing-key","emailDlRouting") .build(); } /** * 用来做死信队列的Queue * @return */ @Bean public Queue emailDlQueue(){ // 默认也是持久化的 return new Queue("emailDlQueue",true); } /** * 正常路由 * @return */ @Bean public Binding emailBinding(){ return BindingBuilder.bind(emailQueue()).to(emailExchange()).with("emailRouting"); } /** * 私信队列的路由 * @return */ @Bean public Binding emailDlBinding(){ return BindingBuilder.bind(emailDlQueue()).to(emailDlExchange()).with("emailDlRouting"); } }
模拟异常
可看到多次重试后的消息进入了死信队列
1、通过人工去处理死信队列
2、等待系统正常后把死信队列中的消息路由到Queue去处理
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。