zoukankan      html  css  js  c++  java
  • 【RabbitMQ】09 深入部分P2 消费限流 & TTL

    1、消费限流设置

     就是设置项的2个调整,当然还有前面的手动确认的监听改动处理

    https://www.bilibili.com/video/BV15k4y1k7Ep?p=26

    2、消息过时设置 TTL(Time To Live)

    https://www.bilibili.com/video/BV15k4y1k7Ep?p=27

    RabbitMQ可以设置消息的存活时间,同样也能设置队列的存活时间

    新建一个10秒存活消息的队列:

    再新建一个Topic交换机:

    在交换机设置中绑定队列:

    现在发布一条消息,如果10秒内没有消费者服务来接收消息,则RabbitMQ10秒后销毁消息

    队列列表盯着这个队列不停刷新等到10秒,这条消息就会被移除了

     

    Spring&Java代码配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:rabbit="http://www.springframework.org/schema/rabbit"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           https://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/rabbit
           http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">
        <!--加载配置文件-->
        <context:property-placeholder location="classpath:rabbitmq.properties"/>
    
        <!-- 定义rabbitmq connectionFactory
    
            publisher-confirms="true" 消息发送可确认
            publisher-returns="true"
        -->
        <rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}"
                                   port="${rabbitmq.port}"
                                   username="${rabbitmq.username}"
                                   password="${rabbitmq.password}"
                                   virtual-host="${rabbitmq.virtual-host}"
                                   publisher-confirms="true"
                                   publisher-returns="true"
        />
        <!--定义管理交换机、队列-->
        <rabbit:admin connection-factory="connectionFactory"/>
    
        <!--定义rabbitTemplate对象操作可以在代码中方便发送消息-->
        <rabbit:template id="rabbitTemplate" connection-factory="connectionFactory"/>
    
        <rabbit:queue id="ttl-queue" name="confirm-test-queue" >
            <rabbit:queue-arguments>
                <!--  过期时间设置10秒 注意这里要指定类型数字 -->
                <entry key="x-message-ttl" value="10000" value-type="java.lang.Integer" />
            </rabbit:queue-arguments>
        </rabbit:queue>
        <!-- 交换机设置-->
        <rabbit:topic-exchange name="ttl-exchange" >
            <rabbit:bindings>
                <rabbit:binding queue="ttl-queue" pattern="ttl.#"  />
            </rabbit:bindings>
        </rabbit:topic-exchange>
    </beans>

    测试代码:

        /**
         * 消息存活设置
         */
        @Test
        public void ttlTest() {
            for (int i = 0; i < 10; i++) {
                rabbitTemplate.convertAndSend("ttl-exchange", "ttl.info", "hello ttl timeout test ....");
            }
        }

    队列经过10秒就会销毁这些消息:

     如果设置消息的TTL

        /**
         * 消息存活设置
         */
        @Test
        public void ttlTest() {
    //        for (int i = 0; i < 10; i++) {
    //            rabbitTemplate.convertAndSend("ttl-exchange", "ttl.info", "hello ttl timeout test ....");
    //        }
    
            rabbitTemplate.convertAndSend(
                    "ttl-exchange",
                    "ttl.info",
                    "hello ttl timeout test ....",
                    message -> {
                        message.getMessageProperties().setExpiration("60000"); // 消息的过期时间 字符串设置  这个时间不能超过队列销毁的时间
                        return message;
                    });
        }

    队列时限 和 消息时限 的规则就是,取时间短的生效

    队列过期 销毁队列内的所有消息

    消息过期 只有消息在队列顶端处被判断是否过期,才会被销毁(因为案例只写了一个,直接推到顶端销毁了)

     

     

     

  • 相关阅读:
    Ext的组件结构分析(转)
    分析模式 责任模式
    Nhibernate学习起步之manytoone篇(转 明了篇)
    企业开发框架NHibernate和Spring.Net简介3
    企业开发框架NHibernate和Spring.Net简介4
    NHibernate Cascades: the different between all, alldeleteorphans and saveupdate
    XML与数据库
    企业开发框架NHibernate和Spring.Net简介1
    python对函数的理解
    seleniumwebdriver(python) (十五) 鼠标事件
  • 原文地址:https://www.cnblogs.com/mindzone/p/15376956.html
Copyright © 2011-2022 走看看