最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2025年01月06日 11:12:17   作者:moxiaoran5753  
介紹了如何在Spring Boot項(xiàng)目中使用RabbitMQ實(shí)現(xiàn)訂單的延時處理和超時關(guān)閉,通過配置RabbitMQ的交換機(jī)、隊(duì)列和綁定關(guān)系,以及編寫監(jiān)聽方法,實(shí)現(xiàn)了訂單數(shù)據(jù)的發(fā)送和延時消費(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ā)布消息成功到交換器后會觸發(fā)回調(diào)方法
    publisher-confirm-type: correlated
    template:
    # 只要抵達(dá)隊(duì)列,以異步發(fā)送優(yōu)先回調(diào)以異步發(fā)送優(yōu)先回調(diào)我們這個returnconfirm
      mandatory: true
    # 開啟發(fā)送消息抵達(dá)隊(duì)列的確認(rèn)
    publisher-returns: true

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

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

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

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

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

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

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

相關(guān)文章

  • mybatis注解之@Mapper和@MapperScan的使用

    mybatis注解之@Mapper和@MapperScan的使用

    這篇文章主要介紹了mybatis注解之@Mapper和@MapperScan的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • gRPC實(shí)踐之proto及Maven插件概念及使用詳解

    gRPC實(shí)踐之proto及Maven插件概念及使用詳解

    這篇文章主要為大家介紹了gRPC實(shí)踐之proto及Maven插件概念及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Spring Boot下的Job定時任務(wù)

    Spring Boot下的Job定時任務(wù)

    編寫Job定時執(zhí)行任務(wù)十分有用,能解決很多問題,這次實(shí)習(xí)的項(xiàng)目里做了一下系統(tǒng)定時更新三方系統(tǒng)訂單狀態(tài)的功能,這里用到了Spring的定時任務(wù)使用的非常方便,下面總結(jié)一下如何使用,感興趣的朋友參考下吧
    2017-05-05
  • mybatis新手快速入門以及一些錯誤匯總

    mybatis新手快速入門以及一些錯誤匯總

    這篇文章主要給大家介紹了關(guān)于mybatis新手快速入門以及一些錯誤的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • java基本教程之多線程基本概念 java多線程教程

    java基本教程之多線程基本概念 java多線程教程

    多線程是Java中不可避免的一個重要主體。下面是對“JDK中新增JUC包”之前的Java多線程內(nèi)容的講解,JUC包是由Java大師Doug Lea完成并在JDK1.5版本添加到Java中的
    2014-01-01
  • Java線程之間通信的幾種方式詳解

    Java線程之間通信的幾種方式詳解

    在 Java 中,線程之間的通信是通過共享內(nèi)存模型來實(shí)現(xiàn)的,線程通過共享的對象和變量來交換數(shù)據(jù),為了確保線程間通信的正確性,Java 提供了一系列機(jī)制來實(shí)現(xiàn)線程安全、同步和通信,以下是常用的幾種線程間通信的方式,以及它們的使用方法和場景,需要的朋友可以參考下
    2025-03-03
  • 解決RestTemplate 的getForEntity調(diào)用接口亂碼的問題

    解決RestTemplate 的getForEntity調(diào)用接口亂碼的問題

    這篇文章主要介紹了解決RestTemplate 的getForEntity調(diào)用接口亂碼的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring聲明式事務(wù)@Transactional注解實(shí)現(xiàn)元數(shù)據(jù)驅(qū)動的事務(wù)管理

    Spring聲明式事務(wù)@Transactional注解實(shí)現(xiàn)元數(shù)據(jù)驅(qū)動的事務(wù)管理

    這篇文章主要為大家介紹了Spring聲明式事務(wù)@Transactional注解實(shí)現(xiàn)元數(shù)據(jù)驅(qū)動的事務(wù)管理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • SpringBoot同一個方法操作多個數(shù)據(jù)源保證事務(wù)一致性

    SpringBoot同一個方法操作多個數(shù)據(jù)源保證事務(wù)一致性

    本文探討了在Spring Boot應(yīng)用中,如何在同一個方法中操作多個數(shù)據(jù)源并保證事務(wù)的一致性,由于聲明式事務(wù)的限制,直接使用@Transactional注解無法滿足需求,文章介紹了解決方案:編程式事務(wù),它允許在代碼級別更靈活地管理事務(wù),確保多數(shù)據(jù)源操作的事務(wù)一致性
    2024-11-11
  • Spring Boot異常處理問題小結(jié)

    Spring Boot異常處理問題小結(jié)

    在 Spring Boot 中,異常處理是一個重要的部分,可以允許開發(fā)者優(yōu)雅地處理應(yīng)用程序中可能發(fā)生的錯誤和異常,這篇文章主要介紹了Spring Boot異常處理問題小結(jié),需要的朋友可以參考下
    2024-05-05

最新評論

禄劝| 肃宁县| 怀集县| 丽江市| 正阳县| 高尔夫| 老河口市| 沁水县| 林甸县| 安顺市| 合阳县| 大姚县| 麻栗坡县| 永和县| 冀州市| 深水埗区| 西盟| 扶绥县| 海原县| 施甸县| 南溪县| 诸城市| 遂昌县| 英超| 集安市| 特克斯县| 鹤庆县| 庄河市| 留坝县| 广饶县| 安图县| 墨脱县| 湖南省| 边坝县| 青浦区| 五指山市| 上高县| 纳雍县| 兰坪| 东乡县| 怀来县|