RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用。Spring Boot的兴起,极大地简化了Spring的开发,本文将使用Spring Boot与RabbitMQ进行简单整合,实现生产和消费消息。

配置

Spring Boot使用了这么久,套路差不多摸清楚了。Spring Boot与其他组件进行整合,无非就是加入pom依赖,接着配置一些基本信息,然后就可以使用相关注解进行开发了。

RabbitMQ也是相同的套路,第一步要引入依赖。要引入的依赖比较容易记,RabbitMQ实现了AMQP协议,引入依赖spring-boot-starter-amqp

           <!-- rabbitmq依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

第二步要配置RabbitMQ连接信息,包括主机、端口号、用户名和密码。RabbitMQ配置信息:

spring.rabbitmq.host=192.168.16.128
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

如果没有安装RabbitMQ,我推荐使用Docker快速安装和启动,启动命令:

docker run -d --hostname my-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3.8.0-beta.4-management

实现生产者和消费者

第三步实现生产和消费者。

生产者

生产者用来生产消息并进行发送。需要用到RabbitTemplateRabbitTemplate是发送消息的关键类,convertAndSend方法可以指定消息发送的交换器、路由键、消息内容等。

@Component
public class Producer {
@Autowired
RabbitTemplate rabbitTemplate; public void produce() {
String message = new Date() + "Beijing";
System.out.println("生产者生产消息=====" + message);
rabbitTemplate.convertAndSend("rabbitmq_queue", message);
}
}

消费者

消费者消费生产者发送的消息。实现消费者主要用到注解@RabbitListener@RabbitListener是一个功能强大的注解。这个注解里面可以注解配置@QueueBinding、@Queue、@Exchange直接通过这个组合注解一次性搞定多个交换机、绑定、路由、并且配置监听功能等。

  1. 在RabbitMQ控制面板创建好队列,使用@RabbitListener监听队列。
@RabbitListener(queues = "rabbitmq_queue")
  1. 使用@RabbitListener自动创建队列。
@RabbitListener(queuesToDeclare = @Queue("myQueue"))
  1. 使用@RabbitListener自动创建队列,并对Exchange和Queue进行绑定。
@RabbitListener(bindings = @QueueBinding(value =  @Queue("myQueue"), key = "mobi", exchange = @Exchange("myExchange")))

本文使用@RabbitListener自动创建一个队列。

@Component
public class Consumer {
@RabbitHandler
@RabbitListener(queuesToDeclare = @Queue("rabbitmq_queue"))
public void process(String message) {
System.out.println("消费者消费消息=====" + message);
}
}

测试

第四步测试。为了方便,写一个测试类生产消息。然后启动工程,运行测试类,使生产者发送消息,不出意外消费者将会消费消息,在控制台输出信息。

@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests { @Autowired
Producer producer; @Test
public void contextLoads() {
producer.produce();
} }

操作之后可以在测试控制台看到生产者消息发送成功,在该工程的控制台看到消息消费成功。

访问RabbitMQ控制面板也会看到有消息。

总结

Spring Boot极大的简化各种组件的使用,在实际应用中,当一个服务处理完成之后可以将消息放进RabbitMQ消息队列,另外一个服务从队列中取消息进行消费,这样可以降低服务之间的耦合,实现一些异步的操作。本文仅作为一个简单demo供参考。

GitHub地址

RabbitMQ(三):RabbitMQ与Spring Boot简单整合的更多相关文章

  1. 从零开始的Spring Boot(2、在Spring Boot中整合Servlet、Filter、Listener的方式)

    在Spring Boot中整合Servlet.Filter.Listener的方式 写在前面 从零开始的Spring Boot(1.搭建一个Spring Boot项目Hello World):http ...

  2. Spring Boot2 系列教程(三十二)Spring Boot 整合 Shiro

    在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 Shiro. 今天松哥就来和大家聊聊 Spring Boot ...

  3. Spring Boot Security 整合 JWT 实现 无状态的分布式API接口

    简介 JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案.JSON Web Token 入门教程 - 阮一峰,这篇文章可以帮你了解JWT的概念.本文重点讲解Spring Boo ...

  4. Spring Boot 应用系列 5 -- Spring Boot 2 整合logback

    上一篇我们梳理了Spring Boot 2 整合log4j2的配置过程,其中讲到了Spring Boot 2原装适配logback,并且在非异步环境下logback和log4j2的性能差别不大,所以对 ...

  5. Spring Boot:整合Spring Security

    综合概述 Spring Security 是 Spring 社区的一个顶级项目,也是 Spring Boot 官方推荐使用的安全框架.除了常规的认证(Authentication)和授权(Author ...

  6. Spring Boot:整合Spring Data JPA

    综合概述 JPA是Java Persistence API的简称,是一套Sun官方提出的Java持久化规范.其设计目标主要是为了简化现有的持久化开发工作和整合ORM技术,它为Java开发人员提供了一种 ...

  7. Spring Boot:整合Shiro权限框架

    综合概述 Shiro是Apache旗下的一个开源项目,它是一个非常易用的安全框架,提供了包括认证.授权.加密.会话管理等功能,与Spring Security一样属基于权限的安全框架,但是与Sprin ...

  8. Spring Boot 快速整合Swagger

    一.前言 Spring Boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...

  9. 玩转spring boot——简单登录认证

    前言 在一个web项目中,某些页面是可以匿名访问的,但有些页面则不能.spring mvc提供了HandlerInterceptor接口来应对,只需要重写preHandle方法便可以实现此功能.那么使 ...

随机推荐

  1. 【web自动化测试】requests-html 这个解析库,能让你更轻松的获取网页内容

    1. 开始 Python 中可以进行网页解析的库有很多,常见的有 BeautifulSoup 和 lxml 等.在网上玩爬虫的文章通常都是介绍 BeautifulSoup 这个库,我平常也是常用这个库 ...

  2. 基于 HTML5 Canvas 的元素周期表展示

    前言 之前在网上看到别人写的有关元素周期表的文章,深深的勾起了一波回忆,记忆里初中时期背的“氢氦锂铍硼,碳氮氧氟氖,钠镁铝硅磷,硫氯氩钾钙”.“养(氧)龟(硅)铝铁盖(钙),哪(钠)家(钾)没(镁)青 ...

  3. kubernetes实战篇之helm安装

    系列目录 Helm是kubernetes的应用包管理工具,是CNCF孵化器下的一个项目,主要用来管理 Charts.类似于 Ubuntu 中的 APT 或 CentOS 中的 YUM.它提供了一种简单 ...

  4. Fiddler如何过滤无用的链接

    场景:现在是移动端的天下,测试过程中,抓包工具肯定必不可少,如何使用这里就不赘述,这里给大家讲述下如何过滤那些没有的链接,js ,png等无用的信息 工具:fiddler-use Filters功能: ...

  5. 精通并发与 Netty (二)常用的 rpc 框架

    Google Protobuf 使用方式分析 对于 RPC 协议来说,最重要的就是对象的发送与接收,这就要用到序列化与反序列化,也称为编码和解码,序列化与反序列化和网络传输一般都在对应的 RPC 框架 ...

  6. 借助URLOS快速安装Discuz论坛

    ### 简介 Discuz!是个可免费下载的PHP网络论坛程序,简称DZ,由戴志康所创立,当前最新版本是Discuz! X3.4.前身为Crossday Bulletin,最初改自XMBForum,尔 ...

  7. kd树原理及实现

    常用来作空间划分及近邻搜索,是二叉空间划分树的一个特例.通常,对于维度为k,数据点数为N的数据集,kd树适用于N≫2的k次方的情形. 1维数据的查询 假设在数据库的表格T中存储了学生的语文成绩chin ...

  8. Codeforces Gym101505G:Orchard Division(扫描线+线段树第k大)

    题目链接 题意 给出一个m*m的地图,上面有n个点,现在需要用一个自定义面积的矩形笼罩住恰好n/2个点,并且这个矩形需要有一个点在至少一个角落上,问这个矩形最小的面积是多少. 思路 有点类似于扫描线. ...

  9. 再见Jenkins,从Gitlab代码提交到k8s服务持续交付只需七毛三(走过路过不要错过)

    Gitlab runner 快速搭建CICD pipeline 背景 日常开发中,相信大家已经做了很多的自动化运维环境,用的最多的想必就是利用Jenkins实现代码提交到自动化测试再到自动化打包,部署 ...

  10. Python线程池ThreadPoolExecutor源码分析

    在学习concurrent库时遇到了一些问题,后来搞清楚了,这里记录一下 先看个例子: import time from concurrent.futures import ThreadPoolExe ...