• Spring AMQP:RabbitTemplate SimpleMessageListenerContainer


    一.RabbitTemplate介绍

    RabbitTemplate:消息模板,在与Spring AMQP整合时,进行发送消息的关键类。

    包括了可靠性投递消息方法、回调监听消息接口ConfirmCallBack、返回值确认接口ReturnCallBack等,同样需要进行注入到ioc容器中。

    与spring整合需要实例化,与spring boot整合只需要在配置文件中配置就好了

    相关配置

        @Bean
        public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory){
            return new RabbitTemplate(connectionFactory);
        }

    测试

    发送消息

        @Test
        public void testSend1(){
            rabbitTemplate.convertAndSend("amqp.bean.topic", "amqp.send","hello spring");
        }

    结果:

     测试2:

        @Test
        public void testSend(){
            //创建消息
            MessageProperties properties = new MessageProperties();
            properties.getHeaders().put("send.amqp","测试发送信息");
            Message message = new Message("hello spring amqp".getBytes(), properties);
    
            //发送
            rabbitTemplate.convertAndSend("amqp.bean.topic", "amqp.send", message, message1 -> {
                System.out.println("添加额外的设置");
                message1.getMessageProperties().getHeaders().put("extra","额外信息");
                return message1;
            });
        }
    

     测试结果:

    二.SimpleMessageListenerContainer介绍

     简单消息容器,对于消费者的配置项,这个类可以满足

    监听多个队列、自动启动、自动声明,事务设置,设置消费者属性,批量消费、设置消息确认和自动确认模式、重回队列,异常捕获handler函数,消费者标签生成测虐,多占模式,设置监听器、转换器。

    SimpleMessageListenerContainer可以进行动态设置,在运行的应用中动态修改其消费者数量的大小、接收消息模式等

    配置:

        @Bean
        public SimpleMessageListenerContainer simpleMessageListenerContainer(ConnectionFactory connectionFactory){
            SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
            //设置监听的队列
            container.setQueues(queue());
            //设置当前消费者数量
            container.setConcurrentConsumers(1);
            container.setMaxConcurrentConsumers(5);
            //重回队列
            container.setDefaultRequeueRejected(false);
            //签收机制
            container.setAcknowledgeMode(AcknowledgeMode.AUTO);
            //消费端标签策略
            container.setConsumerTagStrategy(queue-> queue+"_"+ UUID.randomUUID().toString());
            //消息监听
            container.setMessageListener((ChannelAwareMessageListener) (message, channel) -> System.out.println(new String(message.getBody())));
            return container;
        }
    

    运行springboot主应用,

    可以看到在rabbitmq的控制台中,有Container监听的队列。

  • 相关阅读:
    034.Python的__str__,__repr__,__bool__ ,__add__和__len__魔术方法
    033.Python的__del__析构方法he__call__方法
    032.Python魔术方法__new__和单态模式
    python3使用tabulate漂亮的打印数据
    在Linux真正有效的调节鼠标速度!
    RouterOS上实现内网DNS劫持
    使用grease monkey强力清除搜索结果页的广告
    centos 6.5 apache下配置python cgi 并解决中文乱码
    python的缩进语法不是一种好的设计
    让npm默认使用taobao镜像源
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/13033612.html
Copyright © 2020-2023  润新知