• 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

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

  • 相关阅读:
    Nacos注册中心7-Server端(启动和重要API)
    等保到底在“保”什么?
    Windows + VS2022超详细点云库(PCL1.8.1)配置
    2020ICPC 昆明站 个人题解
    WKWebKit总结
    可视化(Visual) SQL初探
    UE里的Sync Groups
    十.EtherCAT开发之microchip MCU D51+ LAN9253 的开发COE应用(SPI directly 模式)
    考研408,1000道精心打磨的计算机考研题,选它就对了!
    PPIO边缘云聚焦音视频底层技术,探索元宇宙“登月工程”
  • 原文地址:https://blog.csdn.net/qq_39311377/article/details/132393312