快速入门
相同配置
这里我们把生产端和消费端分离,为两个不同的模块
但是具有相同的一些配置
Maven依赖
添加SpringBoot依赖
1 | <parent> |
配置文件
修改application.properties配置文件
1 | # rabbitmq 连接配置 |
这里使用配置的方式,也是和Spring一大不同,不用再去配置ConnectionFactory去获取连接了,因为SpringBoot有大量的自动配置类,自动进行初始化并添加到ApplicationContext中
生产端快速入门
想要快速的使用RabbitMQ在SpringBoot中非常简单
1.创建启动器类
1 |
|
2.创建一个测试类发送消息
1 | (SpringRunner.class) |
注:这里的exchange需要自己去创建一个,我这个是直接在控制台创建的
3.运行测试类

运行后,可以看到队列中有一条消息等待消费了
消费端快速入门
消费端的使用就更简单了,主要就是@RabbitListener这个注解
1.创建启动器类和配置(同生产端)
2.创建一个Consumer类
1 |
|
分为两步走:
- 添加@Component注解,将消费者注入到容器中
- 在方法上添加
@RabbitListener注解,指定队列名,便可以持续监听消费
3.启动Application测试

正确消费
对于SpringBoot使用RabbitMQ就是这么简单,接下来说一些其他重要使用方式
生产端高级使用
消息的confirm和return机制
使用springboot时,在application.properties中进行一些配置,可以简单方便的开启一些高级特性,比如:
1 | # 开启confirm机制 |
publisher-confirms:开启Confirm,对应需要创建Confirm监听器,进行confirm处理,使用RabbitTemplate.ConfirmCallback,然后为RabbitTemplate进行设置setConfirmCallback()publisher-returns:开启Return机制,对应需要创建Confirm监听器,进行confirm处理,使用RabbitTemplate.ReturnCallback,然后为RabbitTemplate进行设置setReturnCallback()
代码演示
1 | (SpringRunner.class) |
代码非常简单,首先创建两个Callback类,进行方法实现,然后再发消息时进行设置,这里我发送三次消息
第一次,正确的消息投递
1 | rabbitTemplate.send("springboot.exchange","springboot.test",msg,correlationData); |
控制台打印:

第二次,不存在的exchange,错误投递,走confirm,但是ack为false
1 | rabbitTemplate.send("springboot.exchange","1",msg,correlationData); |
控制台打印:

第三次,不存在的routingkey,即路由不可达,走return机制
1 | rabbitTemplate.send("springboot.exchange","1",msg,correlationData); |
控制台打印:

消费端高级使用
对于消费端来说,最重要的就是两个注解
@RabbitListener:使用这个注解标记方法,用来监听配置的队列,也可以声明绑定关系在RabbitMQ中创建@RabbitHandler:表示这个方法是一个RabbitMQ的消费方法,一般配合@RabbitListener使用
@RabbitListener 使用方式
使用方式主要有两种
- 一种是直接配置监听的队列,如果有消息就进行消费
- 第二种是可以声明绑定关系,这样如果MQ中没有这些
Exchange,Queue会自动创建,有的话就不创建
第一种使用方式
就是我们快速入门中的使用方式:
1 | (queues = {"springboot.queue","springboot.queue2"}) |
这里可以声明多个
第二种使用方式
1 | (bindings = ( |
如上代码,可以配置Binding(多个),如果没有这样的绑定关系,会根据是否存在Queue,Exchange进行创建
@RabbitHandler 使用方式
这个注解一般配置@RabbitListener使用,并且当@RabbitListener绑定在类上时
@RabbitListener可以标注在类上面,需配合@RabbitHandler注解一起使用@RabbitListener标注在类上面表示当有收到消息的时候,就交给@RabbitHandler的方法处理,具体使用哪个方法处理,根据MessageConverter转换后的参数类型
1 |
|
@Payload与@Headers
这也是RabbitMQ对于SpringBoot来说,常用的一种注解方式,主要用作方法的入参上,类似@RequestParam
@Payload:绑定入参,表示此参数为消息的body@Headers:绑定入参,表示此参数为消息的Properties
1 | (queues = {"springboot.queue","springboot.queue2"}) |

打印出消息体以及消息的Properties信息
也可以使用@Header, 获取单个 Header属性
1 | (queues = "debug") |
高级配置
使用springboot时,在application.properties中进行一些配置,可以简单方便的开启一些高级特性,比如:
1 | # 设置签收模式:AUTO(自动签收)、MANUAL(手工签收)、NONE(不签收,没有任何操作) |
在设置手工签收后,对于消息的消费需要进行ACK返回
1 | (queues = "springboot.queue") |