声明队列时,指定了死信交换器,存在死信时交由死信交换器转发消息存储到死信队列
package com.song.songvue.config.rabbitmq;import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.HashMap;
import java.util.Map;@Configuration
public class RabbitMQConfig {// 直连交换器public static final String SONG_EXCHANGE = "song_exchange";public static final String SONG_QUEUE = "song_queue";public static final String ROUTING_KEY = "songKey";// 创建一个队列, 如果存在死信时则交由死信交换器转存到死信队列@Beanpublic Queue queue() {Map<String, Object> params = new HashMap<>();params.put("x-message-ttl", 10000);params.put("x-dead-letter-exchange", DeadQueueConfig.DEAD_MESSAGE_EXCHANGE);params.put("x-dead-letter-routing-key", DeadQueueConfig.DEAD_MESSAGE_ROUTING_KEY);return new Queue(SONG_QUEUE, true, false, false, params);}// 创建一个直连交换器@BeanDirectExchange directExchange() {return new DirectExchange(SONG_EXCHANGE);}// 绑定@BeanBinding binding() {return BindingBuilder.bind(queue()).to(directExchange()).with(ROUTING_KEY);}}
死信交换器: (与一般的交换器没什么区别)
package com.song.songvue.config.rabbitmq;import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 死信队列*/
@Configuration
public class DeadQueueConfig {public static final String DEAD_MESSAGE_EXCHANGE = "dead_message_exchange";public static final String DEAD_MESSAGE_QUEUE = "dead_message_queue";public static final String DEAD_MESSAGE_ROUTING_KEY = "dead_message_routing_key";// 死信交换器@BeanDirectExchange deadMessageExchange() {return new DirectExchange(DEAD_MESSAGE_EXCHANGE);}// 死信队列@BeanQueue deadQueue() {return new Queue(DEAD_MESSAGE_QUEUE);}@BeanBinding deadBind() {return BindingBuilder.bind(deadQueue()).to(deadMessageExchange()).with(DEAD_MESSAGE_ROUTING_KEY);}}