目录
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
发表评论