zoukankan      html  css  js  c++  java
  • Spring AMQP spring-rabbit

     Spring-amqp是对AMQP协议的抽象实现,而spring-rabbit 是对协议的具体实现,也是目前的唯一实现。底层使用的就是RabbitMQ。

    添加amqp启动器 

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>

    application.yml中添加RabbitMQ地址:

    spring:
      rabbitmq:
        host: 192.168.56.101
        username: test
        password: 123123
        virtual-host: /test

    template:
    exchange: test.item.exchange
    publisher-confirms: true
    • template:有关AmqpTemplate的配置

      • exchange:缺省的交换机名称,此处配置后,发送消息如果不指定交换机就会使用这个

    • publisher-confirms:生产者确认机制,确保消息会正确发送,如果发送失败会有错误回执,从而触发重试

    •  

    监听者

    在SpringAmqp中,对消息的消费者进行了封装和抽象,一个普通的JavaBean中的普通方法,只要通过简单的注解,就可以成为一个消费者。

    @Component
    public class Listener {
    
        @RabbitListener(bindings = @QueueBinding(
                value = @Queue(value = "spring.test.queue", durable = "true"),
                exchange = @Exchange(
                        value = "spring.test.exchange",
                        ignoreDeclarationExceptions = "true",
                        type = ExchangeTypes.TOPIC
                ),
                key = {"#.#"}))
        public void listen(String msg){
            System.out.println("接收到消息:" + msg);
        }
    }
    • @Componet:类上的注解,注册到Spring容器

    • @RabbitListener:方法上的注解,声明这个方法是一个消费者方法,需要指定下面的属性:

      • bindings:指定绑定关系,可以有多个。值是@QueueBinding的数组。@QueueBinding包含下面属性:

        • value:这个消费者关联的队列。值是@Queue,代表一个队列

        • exchange:队列所绑定的交换机,值是@Exchange类型

        • key:队列和交换机绑定的RoutingKey

    类似listen这样的方法在一个类中可以写多个,就代表多个消费者。

     

    AmqpTemplate

    Spring为AMQP提供了统一的消息处理模板:AmqpTemplate,非常方便的发送消息,其发送方法:

     

    比较常用的3个方法,分别是:

    • 指定交换机、RoutingKey和消息体

    • 指定消息

    • 指定RoutingKey和消息,会向默认的交换机发送消息

    测试 

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = Application.class)
    public class MqDemo {
    
        @Autowired
        private AmqpTemplate amqpTemplate;
    
        @Test
        public void testSend() throws InterruptedException {
            String msg = "hello, Spring boot amqp";
            this.amqpTemplate.convertAndSend("spring.test.exchange","a.b", msg);
            // 等待10秒后再结束
            Thread.sleep(10000);
        }
    }
  • 相关阅读:
    jquery获取对象的方法足以应付常见的各种类型的对象
    jquery如何判断表格同一列不同行input数据是否重复
    老司机带你解读jQuery插件开发流程
    jQuery插件开发详细教程
    jquery动态调整div大小使其宽度始终为浏览器宽度
    jQery使网页在显示器上居中显示适用于任何分辨率
    R语言学习——数据框
    java实验五——字符数组、String、StringBuffer的相互转化,StringBuffer的一些方法
    java实验五——字符数组、String、StringBuffer的相互转化,StringBuffer的一些方法
    java实验四——找鞍点
  • 原文地址:https://www.cnblogs.com/qin1993/p/12651853.html
Copyright © 2011-2022 走看看