欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot使用RabbitMQ實現(xiàn)關(guān)閉超時訂單(示例詳解)

 更新時間:2025年01月06日 11:12:17   作者:moxiaoran5753  
介紹了如何在Spring Boot項目中使用RabbitMQ實現(xiàn)訂單的延時處理和超時關(guān)閉,通過配置RabbitMQ的交換機、隊列和綁定關(guān)系,以及編寫監(jiān)聽方法,實現(xiàn)了訂單數(shù)據(jù)的發(fā)送和延時消費,感興趣的朋友一起看看吧

1.maven中引入rabbitmq的依賴:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

2.application.yml中進行rabbitmq相關(guān)配置:

# rabbitmq空一格寫,內(nèi)嵌在spring里邊
rabbitmq:
    host: 192.168.56.10
    port: 5672
    virtual-host: /
    #發(fā)送端確認機制 correlated:發(fā)布消息成功到交換器后會觸發(fā)回調(diào)方法
    publisher-confirm-type: correlated
    template:
    # 只要抵達隊列,以異步發(fā)送優(yōu)先回調(diào)以異步發(fā)送優(yōu)先回調(diào)我們這個returnconfirm
      mandatory: true
    # 開啟發(fā)送消息抵達隊列的確認
    publisher-returns: true

 在項目啟動類中添加開啟rabbitmq的注解@EnableRabbit

3.創(chuàng)建交換機,隊列,并將隊列綁定到指定交換機:

import com.atguigu.gulimall.order.entity.OrderEntity;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class MyMQConfig {
    @Bean
    public Queue orderDelayQueue(){
        /* * 構(gòu)造一個死信隊列
         *  x-dead-letter-exchange: order-event-exchange
         *  x-dead-letter-routing-key: order.release.order
         *  x-message-ttl: 60000
         * @create 2025/1/1
         **/
        Map<String,Object>arguments=new HashMap<>();
        arguments.put("x-dead-letter-exchange","order-event-exchange");
        arguments.put("x-dead-letter-routing-key","order.release.order");
        arguments.put("x-message-ttl",60000);
        Queue queue = new Queue("order.delay.queue", true, false, false,arguments);
        return queue;
    }
    @Bean
    public Queue orderReleaseOrderQueue(){
        Queue queue = new Queue("order.release.order.queue", true, false, false);
        return queue;
    }
    @Bean
    public Exchange orderEventExchange(){
       return new TopicExchange("order-event-exchange",true,false);
    }
    @Bean
    public Binding orderCreateOrderBinding(){
       return new Binding("order.delay.queue", Binding.DestinationType.QUEUE,"order-event-exchange","order.create.order",null);
    }
    @Bean
    public Binding orderReleaseOrderBinding(){
        return new Binding("order.release.order.queue", Binding.DestinationType.QUEUE,"order-event-exchange","order.release.order",null);
    }
}
 

 在上面的代碼中,創(chuàng)建了2個隊列:order.delay.queue和order.release.order.queue,其中order.delay.queue是延時隊列,為了方便演示,將延時時間設(shè)置為1分鐘(60000ms)。order.release.order.queue是普通隊列。創(chuàng)建了1個交換機:order-event-exchange。order.delay.queue隊列通過路由鍵order.create.order綁定到order-event-exchange交換機,order.release.order.queue隊列通過路由鍵order.release.order也綁定到order-event-exchange交換機。在交換機的選擇上,考慮到要綁定到不同的隊列和路由鍵,支持模糊匹配,這里使用Topic交換機。

4.在MyMQConfig 創(chuàng)建一個方法監(jiān)聽隊列:

    @RabbitListener(queues = "order.release.order.queue")
    public void listener(OrderEntity order, Channel channel, Message message) throws IOException {
        System.out.println("收到過期的訂單信息,準備關(guān)閉訂單"+order.getOrderSn());
        channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
    }

 添加上面的方法后,當我們的服務(wù)連上rabbitmq,rabbitmq就會創(chuàng)建上面@Bean標注的交換機和隊列了。

5.寫一個創(chuàng)建訂單的接口,簡單模擬下這個過程:

    @Autowired
    private RabbitTemplate rabbitTemplate;
    @GetMapping("/test/createOrder")
    @ResponseBody
    public String creatOrder(){
        OrderEntity order=new OrderEntity();
        order.setOrderSn(UUID.randomUUID().toString());
        order.setCreateTime(new Date());
        rabbitTemplate.convertAndSend("order-event-exchange","order.create.order",order);
        return "ok";
    }

使用rabbitTemplate將訂單數(shù)據(jù)通過交換機order-event-exchange和路由鍵order.create.order將訂單數(shù)據(jù)order發(fā)送給隊列order.delay.queue。啟動服務(wù)調(diào)用接口,來觀察rabbitmq后臺隊列的變化:

可以看到 order.delay.queue隊列中有1條消息等待消費,由于rabbitmq后臺每隔5秒刷新一次,過1分鐘再去看,隊列中已有消息了。

到此這篇關(guān)于Springboot使用RabbitMQ實現(xiàn)關(guān)閉超時訂單的一個簡單示例的文章就介紹到這了,更多相關(guān)Springboot RabbitMQ關(guān)閉超時訂單內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

  • Java中典型的內(nèi)存泄露問題和解決方法

    Java中典型的內(nèi)存泄露問題和解決方法

    這篇文章主要介紹了Java中典型的內(nèi)存泄露問題和解決方法,典型的內(nèi)存泄露例子是一個沒有實現(xiàn)hasCode和 equals方法的Key類在HashMap中保存的情況,可以通過實現(xiàn)Key類的equals和hasCode方法解決這種內(nèi)存泄漏問題,需要的朋友可以參考下
    2014-04-04
  • 關(guān)于@Scheduled不執(zhí)行的原因分析

    關(guān)于@Scheduled不執(zhí)行的原因分析

    這篇文章主要介紹了關(guān)于@Scheduled不執(zhí)行的原因分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java使用Jdom讀取xml解析實例

    Java使用Jdom讀取xml解析實例

    這篇文章主要介紹了Java使用Jdom讀取xml解析,以實例形式較為詳細的分析了Jdom操作XML文件實現(xiàn)讀取操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Java編程中二維數(shù)組的初始化和基本操作實例

    Java編程中二維數(shù)組的初始化和基本操作實例

    這篇文章主要介紹了Java編程中二維數(shù)組的初始化和基本操作實例,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • Mybatis自定義類型轉(zhuǎn)換器的使用技巧

    Mybatis自定義類型轉(zhuǎn)換器的使用技巧

    這篇文章主要介紹了Mybatis自定義類型轉(zhuǎn)換器的使用技巧,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java實現(xiàn)常用緩存淘汰算法:FIFO、LRU、LFU

    Java實現(xiàn)常用緩存淘汰算法:FIFO、LRU、LFU

    在高并發(fā)、高性能的質(zhì)量要求不斷提高時,我們首先會想到的就是利用緩存予以應(yīng)對。而常用的幾個緩存淘汰算法有:FIFO、LRU和LFU,本文將為大家詳細介紹一下這三個算法并用java實現(xiàn),感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2021-12-12
  • Mybatis中的mapper是如何和XMl關(guān)聯(lián)起來的

    Mybatis中的mapper是如何和XMl關(guān)聯(lián)起來的

    這篇文章主要介紹了Mybatis中的mapper是如何和XMl關(guān)聯(lián)起來的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • JDBC獲取數(shù)據(jù)庫連接的5種方式實例

    JDBC獲取數(shù)據(jù)庫連接的5種方式實例

    JDBC是一種用于執(zhí)行SQL語句的JavaAPI,為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成,提供了諸如查詢和更新數(shù)據(jù)庫中數(shù)據(jù)的方法,這篇文章主要給大家介紹了關(guān)于JDBC獲取數(shù)據(jù)庫連接的5種方式,需要的朋友可以參考下
    2022-06-06
  • 對SpringBoot項目Jar包進行加密防止反編譯

    對SpringBoot項目Jar包進行加密防止反編譯

    最近項目要求部署到其他公司的服務(wù)器上,但是又不想將源碼泄露出去,要求對正式環(huán)境的啟動包進行安全性處理,防止客戶直接通過反編譯工具將代碼反編譯出來,本文介紹了如何對SpringBoot項目Jar包進行加密防止反編譯,需要的朋友可以參考下
    2023-10-10
  • 最新評論