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

springboot整合RabbitMQ 中的 TTL實(shí)例代碼

 更新時(shí)間:2022年09月28日 15:23:24   作者:笑霸final  
TTL 是 RabbitMQ 中一個(gè)消息或者隊(duì)列的屬性,表明一條消息或者該隊(duì)列中的所有消息的最大存活時(shí)間,單位是毫秒,這篇文章主要介紹了springboot整合RabbitMQ 中的 TTL,需要的朋友可以參考下

TTL簡(jiǎn)介

TTL 是什么呢?TTL 是 RabbitMQ 中一個(gè)消息或者隊(duì)列的屬性,表明一條消息或者該隊(duì)列中的所有消息的最大存活時(shí)間,單位是毫秒。換句話說,如果一條消息設(shè)置了 TTL 屬性或者進(jìn)入了設(shè)置 TTL 屬性的隊(duì)列,那么這條消息如果在 TTL 設(shè)置的時(shí)間內(nèi)沒有被消費(fèi),則會(huì)成為"死信"。
下面就根據(jù)這個(gè)圖片來驗(yàn)證代碼

配置類代碼

這里寫一些配置,比如創(chuàng)建隊(duì)列 交換機(jī) 和它們之間的綁定關(guān)系

  • @Qualifier 注解與我們想要使用的特定 Spring bean 的名稱一起進(jìn)行裝配,Spring 框架就能從多個(gè)相同類型并滿足裝配要求的 bean 中找到我們想要的,避免讓Spring腦裂。我們需要做的是@Component或者@Bean注解中聲明的value屬性以確定名稱

注意 包別導(dǎo)錯(cuò)了

package com.xbfinal.springbootrabbitmq.config;


import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;

/**
 * ttl隊(duì)列 配置文件類
 *
 */
@Configuration
public class TtlQueueConfig {

    //普通交換機(jī)名稱
    public static final String X_EXCHANGE="X";
    //死信交換機(jī)名稱
    public static final String Y_DEAD_LETTER_EXCHANGE="Y";
    //普通隊(duì)列名稱
    public static final String QUEUE_A="QA";
    public static final String QUEUE_B="QB";
    //死信隊(duì)列名稱
    public static final String DEAD_LETTER_QUEUE_D="QD";

    /**
     * 聲明x交換機(jī)
     * @return
     */
    @Bean("xExchange")//別名和方法名取一樣
    public DirectExchange xExchange(){
        return new DirectExchange(X_EXCHANGE);
    }

    /**
     * 聲明y交換機(jī)
     * @return
     */
    @Bean("yExchange")//別名和方法名取一樣
    public DirectExchange yExchange(){
        return new DirectExchange(Y_DEAD_LETTER_EXCHANGE);
    }

    //聲明隊(duì)列A
    @Bean("queueA")
    public Queue queueA(){
        final HashMap<String, Object> arguments
                = new HashMap<>();
        //設(shè)置死信交換機(jī)
        arguments.put("x-dead-letter-exchange",Y_DEAD_LETTER_EXCHANGE);
        //設(shè)置死信RoutingKey
        arguments.put("x-dead-letter-routing-key","YD");
        //設(shè)置TTL設(shè)置10秒過期
        arguments.put("x-message-ttl",10000);

        return QueueBuilder.durable(QUEUE_A)
                .withArguments(arguments)
                .build();
    }

    //聲明隊(duì)列B
    @Bean("queueB")
    public Queue queueB(){
         HashMap<String, Object> arguments
                = new HashMap<>();
        //設(shè)置死信交換機(jī)
        arguments.put("x-dead-letter-exchange",Y_DEAD_LETTER_EXCHANGE);
        //設(shè)置死信RoutingKey
        arguments.put("x-dead-letter-routing-key","YD");
        //設(shè)置TTL設(shè)置40秒過期
        arguments.put("x-message-ttl",40000);

        return QueueBuilder.durable(QUEUE_B)
                .withArguments(arguments)
                .build();
    }

    @Bean("queueD")
    public Queue queueD(){
        return QueueBuilder.durable(DEAD_LETTER_QUEUE_D)
                .build();
    }

    /**
     * A隊(duì)列綁定X交換機(jī)
     * @param queueA
     * @return
     */
    @Bean
    public Binding queueABindingX(@Qualifier("queueA")Queue queueA,
                                  @Qualifier("xExchange") DirectExchange xExchange){
        return BindingBuilder.bind(queueA).to(xExchange).with("XA");
    }

    /**
     * B隊(duì)列綁定X交換機(jī)
     * @param queueB
     * @param xExchange
     * @return
     */
    @Bean
    public Binding queueBBindingX(@Qualifier("queueB")Queue queueB,
                                  @Qualifier("xExchange") DirectExchange xExchange){
        return BindingBuilder.bind(queueB).to(xExchange).with("XB");
    }

    /**
     * D隊(duì)列綁定死信y交換機(jī)
     * @param queueD
     * @param yExchange
     * @return
     */
    @Bean
    public Binding queueDBindingX(@Qualifier("queueD")Queue queueD,
                                  @Qualifier("yExchange") DirectExchange yExchange){
        return BindingBuilder.bind(queueD).to(yExchange).with("YD");
    }

}

生產(chǎn)者代碼

我們用Controller寫,通過網(wǎng)頁(yè)提交的方式 生產(chǎn)消息
url:http://localhost:8080/ttl/sendMsg/message

package com.xbfinal.springbootrabbitmq.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

/**
 * 生產(chǎn)者
 * 發(fā)送延遲消息
 */
@Slf4j
@RestController
@RequestMapping("/ttl")
public class SendMsgController {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @GetMapping("/sendMsg/{message}")
    public void sendMsg(@PathVariable String message){
        log.info("當(dāng)前時(shí)間:{},發(fā)送了一條消息({})給兩個(gè)隊(duì)列", new Date().toString(),message);
        //發(fā)送消息
        rabbitTemplate.convertAndSend("X","XA","10秒"+message);
        rabbitTemplate.convertAndSend("X","XB","40秒"+message);
    }
}


消息消費(fèi)者代碼

注意@RabbitListener注解
@RabbitListener注解指定目標(biāo)方法來作為消費(fèi)消息的方法,通過注解參數(shù)指定所監(jiān)聽的隊(duì)列或者Binding。使用@RabbitListener可以設(shè)置一個(gè)自己明確默認(rèn)值的RabbitListenerContainerFactory對(duì)象。

  • @RabbitListener標(biāo)注在方法上,直接監(jiān)聽指定的隊(duì)列,此時(shí)接收的參數(shù)需要與發(fā)送市類型一致
  • 3.@RabbitListener 可以標(biāo)注在類上面,需配合 @RabbitHandler 注解一起使用

@RabbitListener 標(biāo)注在類上面表示當(dāng)有收到消息的時(shí)候,就交給 @RabbitHandler 的方法處理,根據(jù)接受的參數(shù)類型進(jìn)入具體的方法中。

package com.xbfinal.springbootrabbitmq.consumer;

import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.util.Date;

/**
 * 隊(duì)列TTL的消費(fèi)者
 */
@Slf4j
@Component
public class DeadLetterQueueConsumer {

    //接收消息
    @RabbitListener(queues = "QD")
    public void receivedD(Message message, Channel channel)throws Exception{
        String msg=new String(message.getBody());
        log.info("當(dāng)前時(shí)間:{},收到消息:{}",new Date().toString(),msg);
    }
}

驗(yàn)證代碼

先在歷覽器輸入http://localhost:8080/ttl/sendMsg/%E7%AC%91%E9%9C%B8fianl

查看控制臺(tái):

到此這篇關(guān)于springboot整合RabbitMQ 中的 TTL的文章就介紹到這了,更多相關(guān)springboot整合RabbitMQ內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中閉包簡(jiǎn)單代碼示例

    Java中閉包簡(jiǎn)單代碼示例

    這篇文章主要介紹了Java中閉包簡(jiǎn)單代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • idea tomcat亂碼問題的解決及相關(guān)設(shè)置的步驟

    idea tomcat亂碼問題的解決及相關(guān)設(shè)置的步驟

    這篇文章主要介紹了idea tomcat亂碼問題的解決及相關(guān)設(shè)置的步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java中的序列化機(jī)制詳細(xì)解讀

    Java中的序列化機(jī)制詳細(xì)解讀

    這篇文章主要介紹了Java中的序列化機(jī)制詳細(xì)解讀,序列化:將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)臄?shù)據(jù)形式(比如二進(jìn)制)的過程,反序列化:與序列化相對(duì),把序列化轉(zhuǎn)換成的可以存儲(chǔ)或傳輸?shù)臄?shù)據(jù)形式轉(zhuǎn)化為對(duì)象的狀態(tài)信息的過程,需要的朋友可以參考下
    2023-11-11
  • Spring?Boot日志打印配置詳細(xì)介紹

    Spring?Boot日志打印配置詳細(xì)介紹

    本文詳細(xì)介紹了如何在SpringBoot項(xiàng)目中進(jìn)行日志配置,包括日志框架概述、日志級(jí)別配置、日志文件輸出與滾動(dòng)配置、電商交易系統(tǒng)中的應(yīng)用示例以及常見日志問題及解決方案,通過靈活的日志配置,開發(fā)者可以更好地管理和調(diào)試軟件系統(tǒng),需要的朋友可以參考下
    2024-11-11
  • 淺談java如何生成分享海報(bào)工具類

    淺談java如何生成分享海報(bào)工具類

    這篇文章主要介紹了淺談java如何生成分享海報(bào)工具類,想了解分享海報(bào)知識(shí)的同學(xué)不要錯(cuò)過哦
    2021-04-04
  • Micronaut框架的簡(jiǎn)單使用介紹

    Micronaut框架的簡(jiǎn)單使用介紹

    這篇文章主要介紹了Micronaut框架的簡(jiǎn)單使用介紹,幫助大家更好的理解和學(xué)習(xí)使用Micronaut,感興趣的朋友可以了解下
    2021-04-04
  • Vert.x運(yùn)行環(huán)境搭建流程圖解

    Vert.x運(yùn)行環(huán)境搭建流程圖解

    這篇文章主要介紹了Vert.x運(yùn)行環(huán)境搭建流程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Spring注解驅(qū)動(dòng)開發(fā)實(shí)現(xiàn)屬性賦值

    Spring注解驅(qū)動(dòng)開發(fā)實(shí)現(xiàn)屬性賦值

    這篇文章主要介紹了Spring注解驅(qū)動(dòng)開發(fā)實(shí)現(xiàn)屬性賦值,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 詳解Java正則表達(dá)式中Pattern類和Matcher類

    詳解Java正則表達(dá)式中Pattern類和Matcher類

    java.util.regex是一個(gè)用正則表達(dá)式所訂制的模式來對(duì)字符串進(jìn)行匹配工作的類庫(kù)包。包括兩個(gè)類Pattern和Matcher Pattern,Pattern是一個(gè)正則表達(dá)式經(jīng)編譯后的表現(xiàn)模式。Matcher對(duì)象是一個(gè)狀態(tài)機(jī)器,它依據(jù)Pattern對(duì)象做為匹配模式對(duì)字符串展開匹配檢查。
    2016-12-12
  • 解決java連接虛擬機(jī)Hbase無反應(yīng)的問題

    解決java連接虛擬機(jī)Hbase無反應(yīng)的問題

    這篇文章主要介紹了解決java連接虛擬機(jī)Hbase無反應(yīng)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評(píng)論

阿尔山市| 郓城县| 怀仁县| 清流县| 万山特区| 广河县| 龙江县| 江都市| 织金县| 大姚县| 汉川市| 夏津县| 辽阳县| 阜康市| 玉溪市| 建始县| 崇明县| 呼图壁县| 东城区| 大关县| 长泰县| 调兵山市| 马关县| 章丘市| 铁岭市| 万山特区| 方山县| 商南县| 安顺市| 清苑县| 泸西县| 乌兰察布市| 高陵县| 莲花县| 景泰县| 龙江县| 来凤县| 巫山县| 中宁县| 海宁市| 武隆县|