上节讲了缓存数据库
redis
的使用,在实际工做中,通常上在系统或者应用间通讯或者进行异步通知(登陆后发送短信或者邮件等)时,都会使用消息队列进行解决此业务场景的解耦问题。这章节讲解下消息队列RabbitMQ
的集成和简单使用示例。java
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。git
关于AMQP
(摘自互联网):github
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。redis
题外话:其实Redis
也有提供队列功能。但我以为,redis
仍是专门用在缓存方面吧。spring
0.老规矩,加入pom依赖,这已是Springboot
的套路了。docker
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
1.application.properties配置加入rabbitmq相关配置。数据库
RabbitAutoConfiguration
类是其自动加载配置类。api
# 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
系列教程,若有雷同,请多多包涵了。本文是做者在电脑前一字一句敲的,每一步都是实践的。若文中有所错误之处,还望提出,谢谢。
499452441
lqdevOps
完整示例:chapter-12
关于在Docker下安装部署Rabbitmq,可点击Docker:安装部署RabbitMQ。