1.8 KiB
1.8 KiB
消息队列MQ
初识MQ
同步调用

同步调用有3个问题:
- 拓展性差,每次有新的需求,现有支付逻辑都要跟着变化,代码经常变动
- 性能下降,每次远程调用,调用者都是阻塞等待状态。最终整个业务的响应时长就是每次远程调用的执行时长之和
- 级联失败,当交易服务、通知服务出现故障时,整个事务都会回滚,交易失败。
异步调用
技术选型
RabbitMQ
部署
mq:
image: rabbitmq:3.8-management
container_name: mq
restart: unless-stopped
hostname: mq
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: "admin"
RABBITMQ_PLUGINS_DIR: "/plugins:/custom-plugins"
ports:
- "15672:15672"
- "5672:5672"
volumes:
- ./mq-plugins:/custom-plugins
networks:
- hmall-net
http://localhost:15672/ 访问控制台
架构图
publisher
:生产者,发送消息的一方consumer
:消费者,消费消息的一方queue
:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理exchange
:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。不存储virtual host
:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue