SpringBoot | 第十二章:RabbitMQ的集成和使用

前言

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

  • RabbitMQ介绍
  • SpringBoot集成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

原文地址:https://www.cnblogs.com/okong/p/springboot-twelve.html

时间: 2024-08-30 12:02:14

SpringBoot | 第十二章:RabbitMQ的集成和使用的相关文章

《构建之法》第十一、十二章学习总结

第十一章的内容是软件设计与实现. 在第一节中,讲的是关于分析和设计方法,向我们介绍在"需求分析"."设计与实现"阶段."测试""发布"阶段该搞清楚的问题. 在第二节中,讲的是关于图形建模和分析方法.在表达实体和实体之间的关系时,可以用到思维导图(Mind Map).实体关系图(ERD).UCD ;在表达数据的流动时,可以用到DFD工具:在表达控制流的时候可以用到FSM工具:前面提到的这些图形建模方法各有特点,UML却可以有一个

第二十二章 TCP/IP层的实现

                      第二十二章    TCP/IP层的实现        我比较喜欢先难后易,如果把GPU显示管理.和网络管理拿下后:我会从头整理.改写一遍APO操作系统.这样,就会形成APO操作系统的锥形.也获得了全局观.内核CPU线路.和用户CPU线路,你可以将它们看成是独立的2个32位CPU核:内核CPU主要任务是实时处理.硬件中断,256个实时线程包含了一些中断程序的后半部.用户CPU主要是动态优先级进程.线程调度,各种应用程序的运行:2个核之间是通过消息交互.句

Gradle 1.12用户指南翻译——第二十二章. 标准的 Gradle 插件

其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userguide/userguide.html. 另外,Android 手机用户可通过我写的一个程序浏览文档,带缓存功能的,兼容

【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程

原文:[.NET Core项目实战-统一认证平台]第十二章 授权篇-深入理解JWT生成及验证流程 [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本篇就针对第一个思考问题详细的讲解下Ids4是如何生成access_token的,如何验证access_token的有效性,最后我们使用.net webapi来实现一个外部接口(本来想用JAVA来实现的,

C和指针 (pointers on C)——第十二章:使用结构和指针

第十二章 使用结构和指针 这章就是链表.先单链表,后双向链表. 总结: 单链表是一种使用指针来存储值的数据结构.链表中的每个节点包含一个字段,用于指向链表的下一个节点. 有一个独立的根指针指向链表的第1个节点.单链表只能从一个方向遍历. 如何insert单链表:1.新节点的link字段必须设置为指向它的后面节点.2.前一个节点的link字段必须指向这个新节点. 为了防止可能会插入链表的起始位置这种情况,在C中,可以保存一个指向必须进行修改的link字段的指针,而不是保存一个指向前一个节点的指针.

C primer plus 第五版十二章习题

看完C prime plus(第五版)第十二章,随带完成了后面的习题. 1.不使用全局变量,重写程序清单12.4的程序. 先贴出12.4的程序,方便对照: 1 /* global.c --- 使用外部变量 */ 2 #include <stdio.h> 3 int units = 0; //一个外部变量 4 void critic(void); 5 int main(void) 6 { 7 extern int units; 8 9 printf ("How many pounds

构造之法第十一、十二章

第十一章 软件设计与实现 图形建模和分析方法 1表达实体和实体之间的关系(思维导图) 2实体关系图 3Use Case Diagram 表达数据的流动 (1)和管理机构相关的数据流 (2)和读者相关的数据流 (3)和新书入库相关的数据流 (4)和时间相关的数据流 表达数据的流动 (1)和管理机构相关的数据流 (2)和读者相关的数据流 (3)和新书入库相关的数据流 (4)和时间相关的数据流 其他设计方法 1.形式化的方法 2.文学化编程 第十二章 用户体验 用户体验的要素 1.用户的第一印象 2.

Java 第十二章 继承 笔记

Java 第十二章  继承 笔记 一.使用继承:     1)方便修改代码     2)减少代码量 二.super 继承object 类:super 访问父类的无参构造:super 指的是object 的无参构造.     例:子类调用父类:super.属性 / super.方法    注意:子类不能继承父类私有属性:得用set.get方法来调用:    super只能写在代码块的第一句:super只能调用非私有的方法:    super只能出现在子类的方法和构造方法中. 三.不能被继承的父类成

JavaScript DOM编程艺术-学习笔记(第十二章)

第十二章 1.本章是综合前面章节的所有东西的,一个综合实例 2.流程:①项目简介:a.获取原始资料(包括文本.图片.音视频等) b.站点结构(文件目录结构) c.页面(文件)结构 ②设计(切图) ③css -  base.css用于引入使用的css文件 color.css  - 用于设置样式 layout.css - 用于设置布局 Typography.css - 用于设置版式 3.题外话:①在实际开发中,即使是一个空白项目也往往不会从一无所有做起,而借助的平台一般会提供目录结构,所以需要把自己