建立SpringBoot项目时无法响应,通过Spring项目自己导入springBoot的操作步骤
在创建SpringBoot结合RabbitMQ的时候,无法创建springBoot项目(网不好),故使用spring项目自己加入springBoot
1.在pom文件里导入依赖 Spring-boot-parent
2.build里面加入springMaven插件:spring-boot-maven-plugin
3.添加rabbit在springboot里面需要的依赖
4.在resources文件的下创建yml文件
配置一下
在服务中启动RabbitMQ
5.开始创建生产者:
新建一个生产者项目
创建实体类,实现序列化接口
6.创建交换机。
7.创建配置类
这样生产者就部署完毕了,接下来开始部署消费者。
消费者:
首先配置yml文件:
创建实体类:实现implments接口
接下来创建消费者组件。
配置监听器,里面绑定队列queue:
通过 @RabbitListener 注解声明 Binding
通过 @RabbitListener 的 bindings 属性声明 Binding(若 RabbitMQ 中不存在该绑定所需要的 Queue、Exchange、RouteKey 则自动创建,若存在则抛出异常)
详细介绍下队列参数:
name:队列名称
durable: 队列是否持久化。
false:队列在内存中,服务器挂掉后,队列就没了
true:服务器重启后,队列将会重新生成.注意:只是队列持久化,不代表队列中的消息持久化!!!
exclusive:队列是否专属。
专属的范围针对的是连接,也就是说,一个连接下面的多个信道是可见的.对于其他连接是不可见的.连接断开后,该队列会被删除.注意,不是信道断开,是连接断开.并且,就算设置成了持久化,也会删除.
autoDelete: true:
如果所有消费者都断开连接了,是否自动删除.如果还没有消费者从该队列获取过消息或者监听该队列,那么该队列不会删除.只有在有消费者从该队列获取过消息后,该队列才有可能自动删除(当所有消费者都断开连接,不管消息是否获取完)
arguments: null 队列的配置
配置@RabbitHandler,手动签收
@RabbitListener 和 @RabbitHandler 搭配使用
@RabbitListener 可以标注在类上面,需配合 @RabbitHandler 注解一起使用
@RabbitListener 标注在类上面表示当有收到消息的时候,就交给 @RabbitHandler 的方法处理,具体使用哪个方法处理,根据 MessageConverter 转换后的参数类型
注:
@Payload用来获取参数传进来的信息,
Channel: 手动签收需要绑定频道
@Headers是在交换机把消息转发给队列后,获取队列中消息的头的信息
tag:签收消息的id(从请求头中取----》AmqpHeaders.DELIVER_TAG)
b:表示消费者是接受当前的消息还是接受队列中所有未签收的消息
既然是手动签收,需要在yml文件中多配置一句话:
配置完成,测试:
首先打开 生产者
打开消费者
查看页面,已经绑定成功了。
开始生产消息
添加junit测试依赖
在消费者控制台页面,显示已经接收成功
而且在页面上管道已经创建了,
消息确认机制在SpringBoot中的实现:
首先回顾:消息确认机制和生产者无关,之和消费者有关。
在生产者的yml文件中添加如下配置:
添加确认和返回的一个监听器,来监听我们的确认消息和返回消息。
correlationData:自定义消息的ID:
可以在这里面配置好路由Key
然后在消费者里面配置路由key