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

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

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

1.maven中引入rabbitmq的依賴:

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

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

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

 在項(xiàng)目啟動(dòng)類中添加開(kāi)啟rabbitmq的注解@EnableRabbit

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

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)造一個(gè)死信隊(duì)列
         *  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個(gè)隊(duì)列:order.delay.queue和order.release.order.queue,其中order.delay.queue是延時(shí)隊(duì)列,為了方便演示,將延時(shí)時(shí)間設(shè)置為1分鐘(60000ms)。order.release.order.queue是普通隊(duì)列。創(chuàng)建了1個(gè)交換機(jī):order-event-exchange。order.delay.queue隊(duì)列通過(guò)路由鍵order.create.order綁定到order-event-exchange交換機(jī),order.release.order.queue隊(duì)列通過(guò)路由鍵order.release.order也綁定到order-event-exchange交換機(jī)。在交換機(jī)的選擇上,考慮到要綁定到不同的隊(duì)列和路由鍵,支持模糊匹配,這里使用Topic交換機(jī)。

4.在MyMQConfig 創(chuàng)建一個(gè)方法監(jiān)聽(tīng)隊(duì)列:

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

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

5.寫一個(gè)創(chuàng)建訂單的接口,簡(jiǎn)單模擬下這個(gè)過(guò)程:

    @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ù)通過(guò)交換機(jī)order-event-exchange和路由鍵order.create.order將訂單數(shù)據(jù)order發(fā)送給隊(duì)列order.delay.queue。啟動(dòng)服務(wù)調(diào)用接口,來(lái)觀察rabbitmq后臺(tái)隊(duì)列的變化:

可以看到 order.delay.queue隊(duì)列中有1條消息等待消費(fèi),由于rabbitmq后臺(tái)每隔5秒刷新一次,過(guò)1分鐘再去看,隊(duì)列中已有消息了。

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

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

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

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

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

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

    Java使用Jdom讀取xml解析實(shí)例

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

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

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

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

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

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

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

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

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

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

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

    對(duì)SpringBoot項(xiàng)目Jar包進(jìn)行加密防止反編譯

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