TAG : 扩展性 多语言客户端 管理界面 ERlang

优点

  1. RabbitMQ 一个比较有特色的功能是支持非常灵活的路由配置

和其他消息队列不同的是,它在生产者(Producer)和队列(Queue)之间增加了一个 Exchange 模块,你可以理解为交换机。这个 Exchange 模块的作用和交换机也非常相似,根据配置的路由规则将生产者发出的消息分发到不同的队列中。路由的规则也非常灵活,甚至你可以自己来实现路由规则。

  1. RabbitMQ 的客户端支持的编程语言大概是所有消息队列中最多的

如果你的系统是用某种冷门语言开发的,那你多半可以找到对应的 RabbitMQ 客户端。

缺点

  1. RabbitMQ 对消息堆积的支持并不好

在它的设计理念里面,消息队列是一个管道,大量的消息积压是一种不正常的情况,应当尽量去避免。当大量消息积压的时候,会导致 RabbitMQ 的性能急剧下降。

  1. RabbitMQ 的性能是我们介绍的这几个消息队列中最差的

根据官方给出的测试数据综合我们日常使用的经验,依据硬件配置的不同,它大概每秒钟可以处理几万到十几万条消息。其实,这个性能也足够支撑绝大多数的应用场景了,不过,如果你的应用对消息队列的性能要求非常高,那不要选择 RabbitMQ。

  1. RabbitMQ 使用的编程语言 Erlang

很不幸的是,Erlang 就是编程语言中的“汉语”,这个语言的学习曲线非常陡峭。
建议你慎重考虑一下可持续维护的问题。

消息模式

  1. 简单模式 (交换机是默认 default)

image.png

  1. 工作模式 (一个消息只能被一个消费者消费)

生产速度大于消费速度时—-负载均衡
image.png

  1. 订阅模式(一个消息 ,多个消费者获取)

不需要设置 queueName, 设置交换机
image.png

  1. 路由模式 (消息可被多个消费者获取, 生产者也可指定目标队列)

image.png

部署模式

单机模式, 普通集群模式(非高可用)、镜像集群模式

一、RabbitMQ使用场景

1、系统集成与分布式系统的设计
各种子系统通过消息来对接,这种解决方案也逐步发展成一种架构风格,即“通过消息传递的架构”。

2、异步任务处理结果回调的设计
举个例子:记录日志,假如需要记录系统中所有的用户行为日志,如果通过同步的方式记录日志势必会影响系统的响应速度,当我们将日志消息发送到消息队列,记录日志的子系统就会通过异步的方式去消费日志消息。这样不需要同步的写入日志了
3、并发请求的压力高可用性设计
举个例子:比如电商的秒杀场景。当某一时刻应用服务器或数据库服务器收到大量请求,将会出现系统宕机。如果能够将请求转发到消息队列,再由服务器去消费这些消息将会使得请求变得平稳,提高系统的可用性。

Advanced Message Queuing Protocol 高级消息队列协议 (AMQP):
是一个标准开放的应用层的消息中间件(Message Oriented Middleware)协议。AMQP定义了通过网络发送的字节流的数据格式。因此兼容性非常好,任何实现AMQP协议的程序都可以和与AMQP协议兼容的其他程序交互,可以很容易做到跨语言,跨平台。