package cc.mrbird.febs.common.configure; import cc.mrbird.febs.rabbit.constants.ExchangeConstants; import cc.mrbird.febs.rabbit.constants.QueueConstants; import cc.mrbird.febs.rabbit.constants.RouteKeyConstants; import cc.mrbird.febs.rabbit.enumerates.RabbitQueueEnum; import org.springframework.amqp.core.*; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * @author wzy * @date 2021-09-25 **/ @Configuration public class RabbitConfigure { @Resource private ConnectionFactory connectionFactory; @Bean @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public RabbitTemplate rabbitTemplate() { return new RabbitTemplate(connectionFactory); } // === 延时 start === @Bean public DirectExchange delayExchangeTtl() { return new DirectExchange(RabbitQueueEnum.CHOU_JIANG_TIME_TTL.getExchange()); } @Bean public Binding orderDelayBindTtl() { return BindingBuilder.bind(orderDelayQueueTtl()).to(delayExchangeTtl()).with(RabbitQueueEnum.CHOU_JIANG_TIME_TTL.getRoute()); } @Bean public Queue orderDelayQueueTtl() { return QueueBuilder.durable(RabbitQueueEnum.CHOU_JIANG_TIME_TTL.getQueue()) //到期后转发的交换机 .withArgument("x-dead-letter-exchange", RabbitQueueEnum.CHOU_JIANG_TIME.getExchange()) //到期后转发的路由键 .withArgument("x-dead-letter-routing-key", RabbitQueueEnum.CHOU_JIANG_TIME.getRoute()) .build(); } @Bean public DirectExchange orderDelayExchange() { return new DirectExchange(RabbitQueueEnum.CHOU_JIANG_TIME.getExchange()); } @Bean public Queue orderDelayQueue() { return new Queue(RabbitQueueEnum.CHOU_JIANG_TIME.getQueue()); } @Bean public Binding orderDelayBind() { return BindingBuilder.bind(orderDelayQueue()).to(orderDelayExchange()).with(RabbitQueueEnum.CHOU_JIANG_TIME.getRoute()); } // === 延时 end === // === 延时 start === @Bean public DirectExchange delayExchangeTtlNoTime() { return new DirectExchange(RabbitQueueEnum.NO_TIME_TTL.getExchange()); } @Bean public Binding orderDelayBindTtlNoTime() { return BindingBuilder.bind(orderDelayQueueTtlNoTime()) .to(delayExchangeTtlNoTime()) .with(RabbitQueueEnum.NO_TIME_TTL.getRoute()); } @Bean public Queue orderDelayQueueTtlNoTime() { return QueueBuilder.durable(RabbitQueueEnum.NO_TIME_TTL.getQueue()) //到期后转发的交换机 .withArgument("x-dead-letter-exchange", RabbitQueueEnum.NO_TIME.getExchange()) //到期后转发的路由键 .withArgument("x-dead-letter-routing-key", RabbitQueueEnum.NO_TIME.getRoute()) .build(); } @Bean public DirectExchange orderDelayExchangeNoTime() { return new DirectExchange(RabbitQueueEnum.NO_TIME.getExchange()); } @Bean public Queue orderDelayQueueNoTime() { return new Queue(RabbitQueueEnum.NO_TIME.getQueue()); } @Bean public Binding orderDelayBindNoTime() { return BindingBuilder.bind(orderDelayQueueNoTime()) .to(orderDelayExchangeNoTime()) .with(RabbitQueueEnum.NO_TIME.getRoute()); } // === 延时 end === // === 处理中奖 start === @Bean public DirectExchange openPriceExchange() { return new DirectExchange(RabbitQueueEnum.OPEN_PRICE.getExchange()); } @Bean public Queue openPriceQueue() { return new Queue(RabbitQueueEnum.OPEN_PRICE.getQueue()); } @Bean public Binding openPriceBind() { return BindingBuilder.bind(openPriceQueue()).to(openPriceExchange()).with(RabbitQueueEnum.OPEN_PRICE.getRoute()); } // === 处理中奖 end === }