2017-11-19 1 views
0

저는 스프링 부트 토끼 데드 큐를 구성하지만 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()); 
    } 
} 
} 
를 DEAD 레터 큐를 처리하는

@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 죽은 편지 큐/교환을 config (설정)하기

답변

0

thx 신, 나는 finanlly 대답을 찾는다!

모든 구성이 올바르지 만, 데드 레터 큐를 구성하기 전에 mail_queue와 같은 모든 대기열이 생성됩니다. 따라서 큐가 생성 된 후에 큐에 x-dead-letter-exchange를 설정하면 영향을 미치지 않습니다.

中文 就是, 修改 队列 参数 后, 要 删除 队列 重建! 这么 简单 的 一个 팁, 花 了 我 几小时은 ...... 큐를 삭제하는 방법

, 나는 대답을 따릅니다. Deleting queues in RabbitMQ

관련 문제