zoukankan      html  css  js  c++  java
  • SpringBoot | 第十二章:RabbitMQ的集成和使用

    前言

    上节讲了缓存数据库redis的使用,在实际工作中,一般上在系统或者应用间通信或者进行异步通知(登录后发送短信或者邮件等)时,都会使用消息队列进行解决此业务场景的解耦问题。这章节讲解下消息队列RabbitMQ的集成和简单使用示例。

    RabbitMQ介绍

    RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    关于AMQP(摘自互联网):

    AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

    题外话:其实Redis也有提供队列功能。但我觉得,redis还是专门用在缓存方面吧。

    SpringBoot集成RabbitMQ

    0.老规矩,加入pom依赖,这已经是Springboot的套路了。

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

    1.application.properties配置加入rabbitmq相关配置。

    RabbitAutoConfiguration类是其自动加载配置类。

    # rabbitmq相关配置
    spring.rabbitmq.host=127.0.0.1
    spring.rabbitmq.port=5672
    spring.rabbitmq.username=guest
    spring.rabbitmq.password=guest
    

    2.关于配置,以上两步就完成了(Springboot真的太方便了,写代码都是愉悦的)。正常使用时,若作为一个消费者,我们会配置一个接收队列,这里为了示例,直接以最小配置来演示下。

    配置一个名为okong的队列

    @Configuration
    public class RabbitConfig {
        
        /**
         * 定义一个名为:oKong 的队列
         * @return
         */
        @Bean
        public Queue okongQueue() {
            return new Queue("okong");
        }
    }
    

    配置队列处理类,这里的队列就是上面配置的队列名称。:
    Consumer.java

    @Component
    //@RabbitListener 监听 okong 队列
    @RabbitListener(queues = "okong")
    @Slf4j
    public class Consumer {
    
        /**
         * @RabbitHandler 指定消息的处理方法
         * @param message
         */
        @RabbitHandler
        public void process(String message) {
            log.info("接收的消息为: {}", message);
        }
    }
    

    编写消息发送类,这里直接写成api方法,方便调试。
    DemoController.java

    /**
     * 简单示例 发送和接收队列消息
     * @author oKong
     *
     */
    @RestController
    public class DemoController {
        
        //AmqpTemplate接口定义了发送和接收消息的基本操作,目前spring官方也只集成了Rabbitmq一个消息队列。。
        @Autowired
        AmqpTemplate rabbitmqTemplate;
        
        @GetMapping("/send")
        public String send(String msg) {
            //发送消息
            rabbitmqTemplate.convertAndSend("okong", msg);
            return "消息:" + msg + ",已发送";
        }
    }
    

    3.启动应用,正常配置成功,在Rabbitmq的控制台,是可以看见连接对象的。说明已经正常启动了。

    4.访问:http://127.0.0.1:8080/send?msg=hello,rabbitmq, 在控制台就可以看见消费者已经消费到此条消息了:

    2018-07-24 22:59:00.777  INFO 11424 --- [cTaskExecutor-1] c.l.l.springboot.chapter12.Consumer      : 接收的消息为: hello,rabbitmq
    
    

    控制台界面,在Queues标签页,也可以查看到队列okong的消息。

    队列信息

    总结

    本章节主要是对RabbitMQ的集成和简单使用进行了说明,对于高并发系统而言,消息队列是一个常见的解决方案了。比如实现异步消息的通知,实现消费者/生产者模式等。由于对rabbitmq没有过多的了解,详细的用法及相关消息队列的知识,可自行搜索相关资料下,这里就不阐述了。前段时间买了本关于RabbitMQ方面的书籍,等看完了,也希望能单独写一篇关于消息队列的文章,敬请期待!

    最后

    目前互联网上很多大佬都有SpringBoot系列教程,如有雷同,请多多包涵了。本文是作者在电脑前一字一句敲的,每一步都是实践的。若文中有所错误之处,还望提出,谢谢。

    老生常谈

    • 个人QQ:499452441
    • 微信公众号:lqdevOps

    公众号

    个人博客:https://blog.lqdev.cn

    完整示例:chapter-12

    原文地址:http://blog.lqdev.cn/2018/07/24/springboot/chapter-twelve/

    关于在Docker下安装部署Rabbitmq,可点击Docker:安装部署RabbitMQ

  • 相关阅读:
    java 二维码图片生成工具类
    我的PHP学习过程
    js简单表格操作
    在同一个textarea文本框中设置不同的字体
    基础入门--创建项目
    异常处理方式
    2019年度的瞎几把总结
    WebAPI 返回值
    关于背景色
    使用echarts进行画图
  • 原文地址:https://www.cnblogs.com/okong/p/springboot-twelve.html
Copyright © 2011-2022 走看看