2017-11-19 2 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()); 
    } 
} 
} 
を不能キューを処理するために

@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は不能キュー/交換を設定へ

答えて

0

thx神、私はfinanlly答えを見つける!

すべての設定が正しいです。問題は、デッド・レター・キューを構成する前にmail_queueなどのすべてのキューが作成されることです。したがって、キューが作成された後にx-dead-letter-exchangeをキューに設定すると、そのキューは有効になりません。キューを削除する方法

中文の就是、修改队列参数后、要删除队列重建!!!这么简单的一个先端、花了我几小时......

、私は答えに従ってください。 Deleting queues in RabbitMQ

関連する問題