package com.hs.services.config;

import java.util.HashMap;
import java.util.Map; import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* rabbitmq 配置
* @author ZHANGYUKUN
*
*/
@Configuration
public class RabbitMQConfig { //钱包交换机
public static final String walletExchange = "walletExchange"; //红包交换机
public static final String redpacketExchange = "redpacketExchange"; @Bean
public DirectExchange walletExchange() {
return new DirectExchange(RabbitMQConfig.walletExchange, true, false);
}
@Bean
public DirectExchange redpacketExchange() {
return new DirectExchange(RabbitMQConfig.redpacketExchange, true, false);
} /**
* 钱包
*/
public static final String walletAmountChange = "walletAmountChange";
public static final String walletAmountChangeDL = "walletAmountChangeDL"; /**
* 红包
*/
public static final String redpacketChange = "redpacketChange";
public static final String redpacketChangeDL = "redpacketChangeDL"; /**
* 钱包余额 相关
* @return
*/
@Bean
public Queue walletAmountChange() {
return new Queue( RabbitMQConfig.walletAmountChange );
}
@Bean
public Queue walletAmountChangeDL() {
Map<String, Object> arguments = new HashMap<>();
arguments.put("x-dead-letter-exchange", RabbitMQConfig.walletExchange);
arguments.put("x-dead-letter-routing-key", RabbitMQConfig.walletAmountChangeDL);
return new Queue(RabbitMQConfig.walletAmountChangeDL, true, false, false, arguments);
}
@Bean
public Binding walletAmountChangeBind(Queue walletAmountChange ,DirectExchange walletExchange ) {
return BindingBuilder.bind( walletAmountChange ).to( walletExchange ).with( RabbitMQConfig.walletAmountChange );
}
@Bean
public Binding walletAmountChangeBindDL(Queue walletAmountChangeDL ,DirectExchange walletExchange ) {
return BindingBuilder.bind( walletAmountChangeDL ).to( walletExchange ).with( RabbitMQConfig.walletAmountChangeDL );
} /**
* 钱包余额 相关
* @return
*/
@Bean
public Queue redpacketChange() {
return new Queue( RabbitMQConfig.redpacketChange );
}
@Bean
public Queue redpacketChangeDL() {
Map<String, Object> arguments = new HashMap<>();
arguments.put("x-dead-letter-exchange", RabbitMQConfig.redpacketExchange);
arguments.put("x-dead-letter-routing-key", RabbitMQConfig.redpacketChangeDL);
return new Queue(RabbitMQConfig.redpacketChangeDL, true, false, false, arguments);
}
@Bean
public Binding redpacketChangeBind(Queue redpacketChange ,DirectExchange redpacketExchange ) {
return BindingBuilder.bind( redpacketChange ).to( redpacketExchange ).with( RabbitMQConfig.redpacketChange );
}
@Bean
public Binding redpacketChangeBindDL(Queue redpacketChangeDL ,DirectExchange redpacketExchange ) {
return BindingBuilder.bind( redpacketChangeDL ).to( redpacketExchange ).with( RabbitMQConfig.redpacketChangeDL );
} }

上述 ,配了 死信队列,如果 如果 发送到 死信里面的消息 如果 超时,就会被转交给 对应的  正常队列。 死信 的这个特点可以做延时消息。

05-04 05:08