美文网首页程序员Spring Boot首页推荐
SpringBoot基础教程(十五)——与rabbitmq的结合

SpringBoot基础教程(十五)——与rabbitmq的结合

作者: 数齐 | 来源:发表于2018-03-24 13:04 被阅读160次

    消息中间件对于我们系统之间的解耦合,消峰等都有极大的帮助。spring boot 也集成了此部分的内容,集成最为容易的是rabbitmq。今天我们就以rabbitmq为例说明。
    老规矩,先看下pom

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

    AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制,spring-boot-starter-amqp引入的就是rabbitmq。有个前提,你的机子上要首先先安装rabbitmq的server,然后执行rabbitmq-serverserver就启动了。启动后,我们就可以配置我们的客户端程序了。首先看下我们的配置文件

    spring.application.name: spirng-boot-rabbitmq
    
    spring.rabbitmq.host: 127.0.0.1
    spring.rabbitmq.port: 5672
    spring.rabbitmq.username: guest
    spring.rabbitmq.password: guest
    

    配置了服务器的IP,端口,用户名,密码等基础信息,保证我们能连上服务器。

    增加一个Rabbitmq的配置类

    package com.shuqi;
    
    import org.springframework.amqp.core.Queue;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class RabbitConfig {
        @Bean
        public Queue Queue() {
            return new Queue("hello");
        }
    }
    

    创建了一个名称叫做hello的队列,然后producer可以往hello的队列里放数据,consumer可以从hello的队列里消费数据。看下producer的处理程序

    package com.shuqi.controller;
    
    import org.springframework.amqp.core.AmqpTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class HelloController {
    
        @Autowired
        private AmqpTemplate rabbitTemplate;
    
        @RequestMapping("/hello")
        public String hello(@RequestParam String name){
            rabbitTemplate.convertAndSend("hello","hello "+name);
            return "消息发送成功";
        }
    
    }
    
    

    通过controller生产消息,通过AmqpTemplate发送消息。有了生产者我们看下消费者

    package com.shuqi.consumer;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.amqp.rabbit.annotation.RabbitHandler;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    
    @Component
    @RabbitListener(queues = "hello")
    @Slf4j
    public class HelloConsumer {
    
        @RabbitHandler
        public void process(String hello) {
            log.info("接收到的消息:message:{}",hello);
        }
    }
    
    

    @RabbitListener(queues = "hello")表示是一个Rabbitmq的监听器,监听的队列名称是hello,说明数据可定会过来,数据过来了,通过@RabbitHandler修饰的方法来处理过来的数据。打印一下。下面我们启动项目看看效果。
    在浏览器中输入http://localhost:8080/hello?name=shuqi看到下面的结果

    image.png
    看下控制台输出的日志
    2018-03-25 16:24:32.752 INFO 4987 --- [cTaskExecutor-1] com.shuqi.consumer.HelloConsumer : 接收到的消息:message:hello shuqi说明消息已经被consumer接收并处理掉了。大家可以把玩下。

    下节将的内容是:SpringBoot基础教程(十六)——与docker的结合

    本节项目源码

    相关文章

      网友评论

        本文标题:SpringBoot基础教程(十五)——与rabbitmq的结合

        本文链接:https://www.haomeiwen.com/subject/tqeqcftx.html