实现商品秒杀方法之RabbitMQ死信队列

实现商品有不少方法,今天将要介绍一种方法,使用RabbitMQ的死信队列java


1. 建立死信队列:web

名字:queue.concurrent.test.fixed.len

属性以下:
微信

注意第一个属性是死信交换机是啥,第二个属性是队列中的最大长度
学习


2. 建立死信交换机:spa

名字:exchange.concurrent.test.remain.net

属性以下:code


3. 建立剩余队列:orm

名字:queue.concurrent.test.remain.len队列


秒杀的原理:ci


1. 因为死信队列有最大长度,当处在消息队列的消息长度达到最大值时,就会把余下的消息发送到另外一个队列,则死信队列中的消息就是秒杀成功用户的消息,另外一个队列的消息就是秒杀失败的消息


2. 先不要消费消息,要等到秒杀活动结束后再消费这两个队列的消息,由于一边生产一边消费会使私信队列达不到最大长度,就不能精准保证秒杀成功的用户就是固定值。


代码以下:

@Configuration
public class RabbitConfig {

    @Value("${queue.concurrent.test.fixed.len}")
    private String secondKillQueueName;

    @Value("${exchange.concurrent.test.remain}")
    private String deadExchange;


    @Bean
    public Queue secondKillQueue(){
        Map<StringObject> extendArgs = new HashMap<>();
        extendArgs.put("x-dead-letter-exchange", deadExchange);
        extendArgs.put("x-queue-type""classic");
        extendArgs.put("x-max-length"200);
        Queue queue = new Queue(secondKillQueueName, truefalsefalse, extendArgs);
        return queue;
    }
}


@Service
public class RabbitMqSenderService {

    @Autowired
    private RabbitTemplate template;

    public void sendMsgToDeadQueue(String queueName, String msg){
        template.convertAndSend(queueName,msg);
    }

}


本文分享自微信公众号 - Java学习进阶手册(javastudyup)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索