• 基于rabbitmq的Spring-amqp基本使用


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

    1. 依赖和配置

    添加AMQP的启动器:

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

    application.yml中添加RabbitMQ地址:

    spring:
      rabbitmq:
        host: 192.168.0.22
        username: leyou
        password: leyou
        virtual-host: /leyou
    

    2. 监听者

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

    import org.springframework.amqp.core.ExchangeTypes;
    import org.springframework.amqp.rabbit.annotation.Exchange;
    import org.springframework.amqp.rabbit.annotation.Queue;
    import org.springframework.amqp.rabbit.annotation.QueueBinding;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    
    /**
     * @author john
     * @date 2019/12/12 - 8:04
     */
    @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这样的方法在一个类中可以写多个,就代表多个消费者。

    3. AmqpTemplate

    Spring最擅长的事情就是封装,把他人的框架进行封装和整合。

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

    红框圈起来的是比较常用的3个方法,分别是:

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

    4. 测试代码

    @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);
        }
    }
    

    运行后查看日志:

  • 相关阅读:
    流行的开源分布式文件系统比较
    Linux iostat监测IO状态
    M0n0wall软件防火墙教程
    networkscripts/ifcfg配置详解
    LVM 逻辑卷管理器
    Discuz 6.0数据库结构 四(详)
    Discuz 6.0数据库结构 二(详)
    手动配置linux(centos)的IP地址
    Discuz 6.0数据库结构 五(详)
    lnk快捷方式无法打开解决方法
  • 原文地址:https://www.cnblogs.com/ifme/p/12026844.html
Copyright © 2020-2023  润新知