代码编织梦想

1、初识MQ

什么是MQ
MQ (MessageQueue),中文是消息队列,字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。

在这里插入图片描述

1.1 同步通讯

同步调用的优点:

  • 时效性较强,可以立即得到结果

同步调用存在的问题

  • 耦合度高:每次加入新的需求,都要修改原来的代码
  • 性能下降:调用者需要等待服务提供者响应,如果调用链过长则响应时间等于每次调用的时间之和。
  • 资源浪费:调用链中的每个服务在等待响应过程中,不能释放请求占用的资源,高并发场景下会极度浪费系统资源
  • 级联失败:如果服务提供者出现问题,所有调用方都会跟着出问题,如同多米诺骨牌一样,迅速导致整个微服务群故障

异步调用方案
异步调用常见实现就是事件驱动模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AOZG0Ge4-1679063966076)(C:\Users\27995\AppData\Roaming\Typora\typora-user-images\image-20230311105844287.png)]

1.2 异步通讯

异步通信的优点:

事件驱动优势

  • 优势一: 服务解耦
  • 优势二:性能提升,吞吐量提高

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EsFO3Mh5-1679063966077)(C:\Users\27995\AppData\Roaming\Typora\typora-user-images\image-20230311110122114.png)]

  • 优势三:服务没有强依赖,不担心级联失败问题
  • 优势四:流量削峰

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c7uvi2Eg-1679063966078)(C:\Users\27995\AppData\Roaming\Typora\typora-user-images\image-20230311110352747.png)]

异步通信的缺点:

  • ·依赖于Broker的可靠性、安全性、吞吐能力
  • ·架构复杂了,业务没有明显的流程线,不好追踪管理

1.3 MQ常见框架

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mAqS1J2B-1679063966079)(C:\Users\27995\AppData\Roaming\Typora\typora-user-images\image-20230311111036693.png)]

2、RabbitMQ快速入门

2.1 RabbitMQ概述和安装

RabbitMQ概述
RabbitMQ是基于Erlang语言开发的开源消息通信中间件,官网地址: https://www.rabbitmq.com/

2.2 单机部署

我们在Centos7虚拟机中使用Docker来安装。

下载镜像

方式一:在线拉取

docker pull rabbitmq:3-management

方式二:从本地加载

已经提供了镜像包:

上传到虚拟机中后,使用命令加载镜像即可:

docker load -i mq.tar

2.3 安装MQ

执行下面的命令来运行MQ容器:

docker run \
 -e RABBITMQ_DEFAULT_USER=设置自己的账号 \
 -e RABBITMQ_DEFAULT_PASS=设置自己的密码 \
 --name mq \
 --hostname mq1 \
 -p 15672:15672 \
 -p 5672:5672 \
 -d \
 rabbitmq:3-management

2.4 登录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FGCEiB0e-1679063966080)(C:\Users\27995\AppData\Roaming\Typora\typora-user-images\image-20230317132850033.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E7AEvm2Z-1679063966081)(C:\Users\27995\AppData\Roaming\Typora\typora-user-images\image-20230317132635238.png)]

2.5 集群部署

接下来,我们看看如何安装RabbitMQ的集群。

2.6 集群分类

在RabbitMQ的官方文档中,讲述了两种集群的配置方式:

  • 普通模式:普通模式集群不进行数据同步,每个MQ都有自己的队列、数据信息(其它元数据信息如交换机等会同步)。例如我们有2个MQ:mq1,和mq2,如果你的消息在mq1,而你连接到了mq2,那么mq2会去mq1拉取消息,然后返回给你。如果mq1宕机,消息就会丢失。
  • 镜像模式:与普通模式不同,队列会在各个mq的镜像节点之间同步,因此你连接到任何一个镜像节点,均可获取到消息。而且如果一个节点宕机,并不会导致数据丢失。不过,这种方式增加了数据同步的带宽消耗。

我们先来看普通模式集群。

2.7 设置网络

首先,我们需要让3台MQ互相知道对方的存在。

分别在3台机器中,设置 /etc/hosts文件,添加如下内容:

192.168.150.101 mq1
192.168.150.102 mq2
192.168.150.103 mq3

并在每台机器上测试,是否可以ping通对方:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_52889347/article/details/129629693