亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot下RabbitMq實(shí)現(xiàn)定時(shí)任務(wù)

 更新時(shí)間:2019年11月03日 14:42:22   作者:正經(jīng)男大學(xué)生BRLF  
這篇文章主要為大家詳細(xì)介紹了SpringBoot下RabbitMq實(shí)現(xiàn)定時(shí)任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了SpringBoot下RabbitMq實(shí)現(xiàn)定時(shí)任務(wù),供大家參考,具體內(nèi)容如下

定時(shí)任務(wù)場(chǎng)景:訂單下單15分鐘未付款自動(dòng)關(guān)閉

延遲任務(wù)實(shí)現(xiàn)原理圖如下:

根據(jù)上圖看出我們需要兩個(gè)隊(duì)列(一是死信隊(duì)列,消息在里面度過(guò)TLL時(shí)間,二是處理隊(duì)列,消息度過(guò)TLL時(shí)間后進(jìn)入該隊(duì)列),兩個(gè)交換機(jī)和路由(一是用來(lái)將消息送入死信隊(duì)列,二是將消息從死信隊(duì)列送到處理隊(duì)列),但是交換機(jī)其實(shí)可以用同一個(gè),也就是一個(gè)交換機(jī)搭配兩個(gè)路由的方式。

以下為代碼實(shí)現(xiàn)過(guò)程:

//首先rabbitAdmin的配置
 @Bean
 public RabbitAdmin rabbitAdmin(CachingConnectionFactory cachingConnectionFactory){
 RabbitAdmin rabbitAdmin = new RabbitAdmin(cachingConnectionFactory);
 rabbitAdmin.setIgnoreDeclarationExceptions(true);
 return rabbitAdmin;
 }

然后是隊(duì)列交換機(jī)以及綁定的聲明(Queue,Exchange,Binding)

@Autowired
 RabbitAdmin rabbitAdmin;

 /**
 * 創(chuàng)建延遲隊(duì)列,該隊(duì)列內(nèi)容不會(huì)唄監(jiān)聽,TLL到期自動(dòng)轉(zhuǎn)發(fā)
 * @param queueName
 * @param delayExchange
 */
 public void createDelayQueue(String queueName,String delayExchange,String delayRoutingKey){
 Map<String, Object> map = new HashMap<>();
 /**注意這兩個(gè)參數(shù)必須綁定**/
 map.put("x-dead-letter-exchange", delayExchange);
 map.put("x-dead-letter-routing-key", delayRoutingKey);
 rabbitAdmin.declareQueue(new Queue(queueName,true,false,false,map));
 }

 /**
 * 創(chuàng)建普通隊(duì)列
 * @param queueName
 */
 public void createQueue(String queueName){
 rabbitAdmin.declareQueue(new Queue(queueName,true,false,false,new HashMap<>()));
 }
 /**
 * 創(chuàng)建延遲隊(duì)列得交換機(jī),就是一個(gè)普通得交換機(jī)
 * @param name
 */
 public void createExchange(String name){
 rabbitAdmin.declareExchange(new DirectExchange(name,true,false));
 }

 /**
 * 綁定隊(duì)列
 * @param queueName
 * @param delayExchange
 * @param routeKey
 */
 public void bindQueue(String queueName,String delayExchange,String routeKey){
 rabbitAdmin.declareBinding(new Binding(queueName,Binding.DestinationType.QUEUE,delayExchange,routeKey,new HashMap<>()));
 }

 /**
 * 發(fā)送消息
 * @param message
 * @param exchange
 * @param routeKey
 * @param tll 時(shí)間 單位毫秒
 */
 public void sendMessageWithTll(String message,String exchange,String routeKey,String tll){
 rabbitAdmin.getRabbitTemplate().convertAndSend(exchange, routeKey, message, new MessagePostProcessor() {
  @Override
  public Message postProcessMessage(Message message) throws AmqpException {
  message.getMessageProperties().setExpiration(tll);
  return message;
  }
 });
 }

 @Override
 public void sendMessage(String message, String exchange, String routeKey) {
 rabbitAdmin.getRabbitTemplate().convertAndSend(exchange, routeKey, message, new MessagePostProcessor() {
  @Override
  public Message postProcessMessage(Message message) throws AmqpException {
  return message;
  }
 });
 }

進(jìn)行測(cè)試

/**
 * 監(jiān)聽消息
 * @param message
 * @return
 */
 @RabbitListener(queues = "consumerQueue")
 public void getMessage(String message){
 System.out.println("收到消息getMessage:"+message +",time="+MyUtil.FormatDate(new Date()));
 }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • springMVC4之強(qiáng)大類型轉(zhuǎn)換器實(shí)例解析

    springMVC4之強(qiáng)大類型轉(zhuǎn)換器實(shí)例解析

    本篇文章主要介紹了springMVC4之強(qiáng)大類型轉(zhuǎn)換器實(shí)例解析,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java實(shí)現(xiàn)md5和base64加密解密的示例代碼

    Java實(shí)現(xiàn)md5和base64加密解密的示例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)md5和base64加密解密的示例代碼,幫助大家更好的利用Java加密解密文件,感興趣的朋友可以了解下
    2020-09-09
  • Spring Boot使用Log4j2的實(shí)例代碼

    Spring Boot使用Log4j2的實(shí)例代碼

    這篇文章主要介紹了Spring Boot使用Log4j2的實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • IDEA mybatis-generator逆向工程生成代碼

    IDEA mybatis-generator逆向工程生成代碼

    這篇文章主要介紹了IDEA mybatis-generator逆向工程生成代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Spring Boot 中的任務(wù)執(zhí)行器基本概念及使用方法

    Spring Boot 中的任務(wù)執(zhí)行器基本概念及使用方法

    務(wù)執(zhí)行器是 Spring Boot 中的一個(gè)非常實(shí)用的模塊,它可以簡(jiǎn)化異步任務(wù)的開發(fā)和管理,在本文中,我們介紹了任務(wù)執(zhí)行器的基本概念和使用方法,以及一個(gè)完整的示例代碼,需要的朋友可以參考下
    2023-07-07
  • idea克隆maven項(xiàng)目的方法步驟(圖文)

    idea克隆maven項(xiàng)目的方法步驟(圖文)

    這篇文章主要介紹了idea克隆maven項(xiàng)目的方法步驟(圖文),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Mybatis使用Collection屬性的示例代碼

    Mybatis使用Collection屬性的示例代碼

    本文主要介紹了Mybatis使用Collection屬性的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • IDEA 開發(fā)配置SparkSQL及簡(jiǎn)單使用案例代碼

    IDEA 開發(fā)配置SparkSQL及簡(jiǎn)單使用案例代碼

    這篇文章主要介紹了IDEA 開發(fā)配置SparkSQL及簡(jiǎn)單使用案例代碼,本文通過(guò)代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • SpringBoot?整合RabbitMq?自定義消息監(jiān)聽容器來(lái)實(shí)現(xiàn)消息批量處理

    SpringBoot?整合RabbitMq?自定義消息監(jiān)聽容器來(lái)實(shí)現(xiàn)消息批量處理

    Spring Boot中提供了默認(rèn)的監(jiān)聽器容器,但是有時(shí)候我們需要自定義監(jiān)聽器容器,來(lái)滿足一些特殊的需求,比如批量獲取數(shù)據(jù),這篇文章主要介紹了SpringBoot?整合RabbitMq?自定義消息監(jiān)聽容器來(lái)實(shí)現(xiàn)消息批量處理,需要的朋友可以參考下
    2023-04-04
  • springBoot下實(shí)現(xiàn)java自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)表

    springBoot下實(shí)現(xiàn)java自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)表

    這篇文章主要介紹了springBoot下實(shí)現(xiàn)java自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)表的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論