• RabbitMQ---Spring AMQP


    Spring AMQP

    1. 简介

    Spring有很多不同的项目,其中就有对AMQP的支持:
    在这里插入图片描述

    Spring AMQP的页面:http://spring.io/projects/spring-amqp
    在这里插入图片描述

    注意这里一段描述:
    Spring-amqp是对AMQP协议的抽象实现,而spring-rabbit 是对协议的具体实现,也是目前的唯一实现。底层使用的就是RabbitMQ。

    2. 依赖和配置

    添加AMQP的启动器:

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4

    在application.yml中添加RabbitMQ地址:

    spring:
      rabbitmq:
        host: 192.168.137.137
        username: zhangsan
        password: 123456
        virtual-host: /shopping
        port: 5672
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3. 监听者

    在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);
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    • @Componet:类上的注解,注册到Spring容器
    • @RabbitListener:方法上的注解,声明这个方法是一个消费者方法,需要指定下面的属性:
    o bindings:指定绑定关系,可以有多个。值是@QueueBinding的数组。@QueueBinding包含下面属性:
    o value:这个消费者关联的队列。值是@Queue,代表一个队列
    o exchange:队列所绑定的交换机,值是@Exchange类型
    o key:队列和交换机绑定的RoutingKey
    类似listen这样的方法在一个类中可以写多个,就代表多个消费者。

    4. AmqpTemplate

    Spring最擅长的事情就是封装,把他人的框架进行封装和整合。
    Spring为AMQP提供了统一的消息处理模板:AmqpTemplate,非常方便的发送消息,其发送方法:
    在这里插入图片描述

    红框圈起来的是比较常用的3个方法,分别是:
    o 指定消息
    o 指定RoutingKey和消息,会向默认的交换机发送消息
    o 指定交换机、RoutingKey和消息体

    5. 测试代码

    @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);
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    运行后查看日志:
    在这里插入图片描述

  • 相关阅读:
    Using Definition View 使用定义视图
    Redis使用中的缓存雪崩、缓存击穿、缓存穿透问题
    TextView下划线另一种方案
    常见数据库优化面试题
    DC电源模块电容滤波器的原理及构成
    虾皮物流价格是多少?如何计算?
    苹果全球销量超越小米重回第二,荣耀回归国内手机市场第一梯队
    micropython 可视化音频 频谱解析(应该是全网首家)(预告,还没研究完成)
    TikTok搬运视频怎么做,搬运怎样的视频最好
    高通名词解释
  • 原文地址:https://blog.csdn.net/qq_39311377/article/details/132393312