實現商品秒殺方法之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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索