目录
1.初识mq
1.同步通讯
1.同步调用存在的问题
2.优点
2.异步通讯
1.事件驱动优势
2.异步通信的缺点
3.mq常见框架
2.rabbitmq快速入门
官方网址:
https://www.rabbitmq.com/
1.单机部署
在centos7虚拟机中使用docker来安装:
1.在线拉取:
docker pull rabbitmq:3-management
2.本地导入:
docker load -i mq.tar
3.执行下面的命令来运行mq容器:
docker run \
-e rabbitmq_default_user=root \
-e rabbitmq_default_pass=123456 \
--name mq \
--hostname mq1 \
-p 15672:15672 \
-p 5672:5672 \
-d \
rabbitmq:3-management
2.常见消息模型
消息发送流程:
消息接收流程:
3.springamqp
官方地址:https://spring.io/projects/spring-amqp
1.basic queue简单队列模型
1.在父工程中引入spring-amqp的依赖
2.在publisher服务中利用rabbittemplate发送消息到simple.queue这个队列
查看消息队列情况:
3.在consumer服务中编写消费逻辑,监听simple.queue这个队列
2.work queue工作队列模型
案例:模拟workqueue,实现一个队列绑定多个消费者
所以我们可以做一个消费预取限制:
重启消费者consumer类,并运行生产者测试类:
3.发布、订阅模型-fanout
1.发布订阅模式
1.交换机的作用:
- 接收publisher发送的消息
- 将消息按照规则路由到与之绑定的队列
- 不能缓存消息,路由失败,消息丢失
2.常见exchange类型包括:
fanout
:广播direct
:路由topic
:话题
2.fanout exchange
案例:利用springamqp演示fanoutexchange的使用
1.在consumer服务中,利用代码声明队列、交换机,并将两者绑定
2.在consumer服务中,编写两个消费者方法,分别监听fanout.queue1和fanout.queue2
3.在publisher中编写测试方法,向itcast.fanout发送消息
4.发布、订阅模型-direct
- 每一个queue都与exchange设置一个
bindingkey
- 发布者发送消息时,指定消息的
routingkey
- exchange将消息路由到
bindingkey
与消息routingkey
一致的队列
案例:利用springamqp演示directexchange的使用
1.利用@rabbitlistener声明exchange.queue、routingkey
2.在consumer服务中,编写两个消费者方法,分别监听direct.queue1和direct.queue2
启动消费者类,可以在mq服务器上看到新增的队列和路由:
3.在publisher中编写测试方法,向itcast. direct发送消息
查看控制台信息:
队列1确实也是绑定的blue
5.发布、订阅模型-topic
queue与exchange指定bindingkey时可以使用通配符:
案例:利用springamqp演示topicexchange的使用
1.并利用@rabbitlistener声明exchange、queue、routingkey
2.在consumer服务中,编写两个消费者方法,分别监听topic.queue1和topic.queue2
3.在publisher中编写测试方法,向itcast. topic发送消息
6.消息转换器
案例 : 测试发送object类型消息:
说明:在springamqp的发送方法中,接收消息的类型是object,也就是说我们可以发送任意对象类型的消息,springamqp会帮我们序列化为字节后发送。
消息转换器:
推荐用json方式序列化,步骤如下:
consumer模块接收消息的形式:
- 利用
messageconverter
实现的,默认是jdk的序列化 - 注意发送方与接收方必须使用相同的
messageconverter
发表评论