springboot 整合使用 rabbitmq
配置
依赖
创建 rabbitmq 项目时,选择这个依赖
或者添加 maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit-test</artifactId>
<scope>test</scope>
</dependency>
springboot 配置
启动类加注解 @EnableRabbit
spring:
rabbitmq:
host: ip
username: 用户名
password: 密码
补充:虚拟主机最好也加一下,rabbitmq里不配置的话用/,
spring.rabbitmq.virtual-host=/
rabbitmq 添加可远程访问的账户
因为默认用户是没有远程访问权限的,我们创建一个新用户,并赋予远程访问权限。
-
创建新用户
-
把新用户设置为 administrator
-
给新用户所有访问资源权限
rabbitmqctl add_user 用户名 密码
rabbitmqctl set_user_tags 用户名 administrator
rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*"
防火墙开启 5672 端口(非云服务器忽略)
发送和接收消息
发送
object 参数为要发送的消息,如果是 javabean 的话需要实现 Serializable 接口,或者使用 json(下面会说)
如果不需要路由键(例如广播),routingKey 参数为 ""
即可
rabbitTemplate.convertAndSend(exchange, routingKey, object);
接收
就像 queue 数据结构一样,接受数据同时也会弹出数据
该方法返回存储信息的 Message 对象,参数是 queue 名
信息自动转换为 json
rabbitmq 默认发送序列化后的信息,可以配置自动转换为 json 格式。这样发送和接受的信息看起来会非常直观,JavaBean 也不用再实现序列化接口了。
我们添加配置类即可,注意包名
效果图
发送:
接受:
监听消息
springboot 可以使用注解实现监听消息,每当监听到 queue 中添加了消息时,都会执行备注接的方法取出消息。
在 boot 主程序中打开 Rabbitmq 注解
编写监听方法
这里演示两种方式,一种直接接收为 JavaBean,一种接收为 Message 对象
AmqpAdmin 管理组件的使用
创建 exchange
示例:创建 direct 类型的 exchange。其他类型的改下对象前缀即可
创建 queue
绑定 binding
效果图: