1、RabbitMQ

消息队列

应用场景

1、异步处理

当用户注册,给邮箱和手机都发送验证信息

用户注册需要50ms、发邮箱需要50ms、发手机需要50ms,总共需要150ms

用户注册后、将发邮箱和发手机都放到消息队列中,可以通过消息队列进行异步处理,总共可以节省50ms

2、程序解耦

多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败

3、限流削峰

广泛应用于秒杀或抢购活动中,避免流量过大导致应用系统挂掉的情况

RabbitMQ选型和对比

1.从社区活跃度

按照目前网络上的资料,RabbitMQactiveMZeroMQ 三者中,综合来看,RabbitMQ 是首选。

2.持久化消息比较

ZeroMq 不支持,ActiveMqRabbitMq 都支持。持久化消息主要是指我们机器在不可抗力因素等情况下挂掉了,消息不会丢失的机制。

3.综合技术实现

可靠性、灵活的路由、集群、事务、高可用的队列、消息排序、问题追踪、可视化管理工具、插件系统等等。

RabbitMq / Kafka 最好,ActiveMq 次之,ZeroMq 最差。当然ZeroMq 也可以做到,不过自己必须手动写代码实现,代码量不小。尤其是可靠性中的:持久性、投递确认、发布者证实和高可用性。

4.高并发

毋庸置疑,RabbitMQ 最高,原因是它的实现语言是天生具备高并发高可用的erlang 语言。

5.比较关注的比较, RabbitMQ 和 Kafka

RabbitMqKafka 成熟,在可用性上,稳定性上,可靠性上,RabbitMQ胜于 Kafka(理论上)。

另外,Kafka 的定位主要在日志等方面, 因为Kafka 设计的初衷就是处理日志的,可以看做是一个日志(消息)系统一个重要组件,针对性很强,所以 如果业务方面还是建议选择 RabbitMq

还有就是,Kafka 的性能(吞吐量、TPS )比RabbitMq 要高出来很多。

安装配置

1、Erlang的安装及配置

1.1、下载

下载网址:http://www.erlang.org/downloads

image-20210901102845523

选择自己的安装目录,全程下一步

1.2、配置环境变量

image-20210901103048157

配置path,为ERLANG_HOME\bin

image-20210901103225007

1.3、查看配置是否成功

cmd下输入erl

image-20210901103331334

2、RabbitMQ的安装及配置

2.1、下载RabbitMQ

下载网址:http://www.rabbitmq.com/download.html

image-20210901103453924

2.2、安装RabbitMQ

双击安装包,全程下一步

2.3、安装RabbitMQ-Plugins

进入RabbitMQ的sbin目录,打开cmd

执行命令:rabbitmq-plugins enable rabbitmq_management

image-20210901104904852

2.4、配置RabbitMQ环境变量

image-20210901105517697

path环境变量中添加:%RABBITMQ_HOME%\sbin;

3、启动RabbitMQ服务

如果启动报错

管理员运行cmd

1、执行命令:rabbitmq-service.bat remove

2、在RabbitMq任意路径下,建立目录data

3、执行命令,路径改为刚才创建的名录:set RABBITMQ_BASE=D:\rabbitmq_server\data

4、执行命令:rabbitmq-service.bat install

5、执行命令:rabbitmq-plugins enable rabbitmq_management

6、在管理服务中启动服务就可以了、启动输入命令:services.msc

启动成功

image-20210901120926124

4、访问RabbitMQ登录页面

http://localhost:15672

初始的账号密码都是:guest

image-20210901111118250

登录监控平台

image-20210901114702273

Linux下安装

获取RabbitMQ的镜像

启动RabbitMQ容器

应用中的问题

系统架构

img