RabbitMQ
知识总览
同步调用
发出信息后,需要等待回复再去做别的事情
同步调用的优势
时效性强,等待到结果后才返回
同步调用的问题
- 拓展性差
- 性能下降
- 级联失败问题
异步调用
例如支付服务不在调用业务关联度低的服务,而是发送消息通知到Broker
异步调用的问题

MQ的技术选型
RabbitMQ的安装
上传mq.tar
docker load -i mq.tar
1
2
3
4
5
6
7
8
9
10
11
12
13
- ```bash
# 安装容器
docker run \
-e RABBITMQ_DEFAULT_USER=itheima \
-e RABBITMQ_DEFAULT_PASS=123321 \
-v mq-plugins:/plugins \
--name mq \
--hostname mq \
-p 15672:15672 \
-p 5672:5672 \
-d \
rabbitmq:3.8-management浏览器打开192.168.186.100:15672,即可访问RabbitMQ的客户端,用户名为itheima,密码为123321
SpringAMQP
使用官方文档的接口太繁琐,SpringAMQP封装好了一层接口
SprinngAMQP入门案例
引入spring-amqp依赖
配置RabbitMQ服务端地址
发送消息
接收消息
工作模型
多个消费者共享消息队列中的消息
模拟工作Queue
消费者消息推送限制
交换机(Exchange)
Fanout交换机
示例
编写消费者方法:
1 |
|
编写发送者方法:
1 |
|
Direct交换机
Topic交换机
在java客户端中声明队列和交换机

应用

消息可靠性
主要体现在发送者可靠性、MQ可靠性以及消费者可靠性
发送者可靠性
生产者(发送者)确认
MQ可靠性
- 数据持久性
- lazyqueue


消费者的可靠性
消费者的可靠性包括消费者确认机制、失败重试机制、业务幂机制
消费者确认机制
消费者失败重试机制

业务幂等性
实现业务幂等
方案一:唯一消息id
业务判断
思维拓展

延迟消息
生产者发送消息时制定一个时间,消费者不能立刻收到消息,而是在指定时间之后才收到消息
延迟消息实现
包括两种:死信交换机以及延迟消息插件
死信交换机
延迟消息插件
取消超时订单
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SquaneBlog!
评论