私はスプリングブートウサギのデッドレターキューを設定しますが、ErrorHandlerは決してメッセージを受信しません。デッド・レター・キューに関するすべての質問を検索しますが、わかりませんでした。誰でも助けてくれますか?スプリングブートrabbitmqデッドレターキューの設定が機能しない
@Component
@RabbitListener(queues = RabbitConfig.DEAD_LETTER_QUEUE)
public class ErrorHandler {
@RabbitHandler
public void handleError(Object message) {
System.out.println("xxxxxxxxxxxxxxxxxx"+message);
}
}
MailServiceImpl.java MAIL_QUEUE処理するために:
@Service
@RabbitListener(queues = RabbitConfig.MAIL_QUEUE)
@ConditionalOnProperty("spring.mail.host")
public class MailServiceImpl implements MailService {
@Autowired
private JavaMailSender mailSender;
@RabbitHandler
@Override
public void sendMail(TMessageMail form) {
//......
try {
mailSender.save(form);
}catch(Exception e) {
logger.error("error in sending mail: {}", e.getMessage());
throw new AmqpRejectAndDontRequeueException(e.getMessage());
}
}
}
を不能キューを処理するために
@Configuration
public class RabbitConfig {
public final static String MAIL_QUEUE = "mail_queue";
public final static String DEAD_LETTER_EXCHANGE = "dead_letter_exchange";
public final static String DEAD_LETTER_QUEUE = "dead_letter_queue";
public static Map<String, Object> args = new HashMap<String, Object>();
static {
args.put("x-dead-letter-exchange", DEAD_LETTER_EXCHANGE);
//args.put("x-dead-letter-routing-key", DEAD_LETTER_QUEUE);
args.put("x-message-ttl", 5000);
}
@Bean
public Queue mailQueue() {
return new Queue(MAIL_QUEUE, true, false, false, args);
}
@Bean
public Queue deadLetterQueue() {
return new Queue(DEAD_LETTER_QUEUE, true);
}
@Bean
public FanoutExchange deadLetterExchange() {
return new FanoutExchange(DEAD_LETTER_EXCHANGE);
}
@Bean
public Binding deadLetterBinding() {
return BindingBuilder.bind(deadLetterQueue()).to(deadLetterExchange());
}
}
ErrorHandler.java:
RabbitConfig.javaは不能キュー/交換を設定へ