springboot整合rabbitmq
为什么使用rabbitmq消息队列?
应用场景:
可以处理异步通信,应用解耦,流量削峰,
1异步通信
例如异步通信,用户注册完毕后把注册的信息传入到数据库后,发送一个消息给消息队列,监听消息队列有消息就可以发送邮件任务来异步执行。
2应用解耦
下订单的时候,需要减库存,这时可以拆分为两个服务来处理,下完订单发送消息到消息队列,之后库存系统监听队列进行消费减库存。
3流量晓峰
秒杀设计,用户10万请求,但我只有1万件商品,那我就可以在消息队列中设定只有1万的定长,当满了之后,后面的多的请求就直接返回秒杀失败。
先使用docker安装rabbitmq
docker pull rabbitmq:3.8.9-management
运行镜像
docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq 263c941f71ea
查看运行的容器
测试访问
默认账号密码 guest guest登录
测试发送消息消费
1.1创建交换机(点对点形式)
2添加队列
3交换机和队列进行绑定(改绑定关系的路由键是lzc)
4接下来发送的消息测试的路由键我也设置为lzc
5查看消息
已接受到消息
收到消息
1.2创建交换机(发布订阅形式)
两者区别:点对点就是当消息被消费方接收之后消费后,其他的消费者就不可能再收到了,发布订阅就是所有的消费者都可以收到消息。
还有topic模式,该模式就是根据路由键来决定把消息发送给哪个消费者。
springboot整合使用
1引入依赖
2配置地址,其他的用户名密码那些默认也可以
3测试使用 发送消息
得到消息,默认使用的java的序列化机制
4接收消息
发现接收之后队列里的消息就没有了
5改变序列化的机制 以json机制返回出去
再测试
发现消息是以json格式的了
6基于注解的方式接收消息
开启
测试 当项目启动时执行改方法