Rabbit MQ

简介

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)

高级消息队列协议(AMQP)

是应用层协议的一个开放标准,为面向消息的中间件设计


AMQP架构

发送&接收过程

  1. 生产者将消息发送到broker;
  2. exchange根据消息头中的路由key(routing key)到路由表里查询对应的binding;
  3. 然后把消息发送到对应的message queue;
  4. 消费者从queue中读取消息。

应用场景

常用方式分为四种,分别是fanout,direct,topic,headers
详见https://www.jianshu.com/p/19af0f40bbde

Fanout

fanout

Direct

direct

Topic

topic

Headers

headers

使用case

java官方教程:https://www.rabbitmq.com/tutorials/tutorial-one-java.html

master queue的分配策略

为防止queues的master都落在个别的服务节点上,可在以下位置配置:

  • 在queue声明的时候使用x-queue-master-locator参数
  • 在policy上设置queue-master-locator
  • 直接在rabbit mq的配置文件中定义queue_master_locator

可配置的策略

min-masters:选择master数最少的那个服务节点
client-local:选择与client相连接的那个服务节点
random:随机分配

特性

1、持久化、投递确认,消费确认,高可用
2、消息路由灵活,接口使用简单方便
3、集群部署
4、管理方便,有管理后台
5、Erlang编写,高并发支持

不足与未来

为保证读写的FIFO顺序,读写都需要在master queue完成,导致性能瓶颈,吞吐量受限;

最常对比的是Kafka,两者都是优秀的队列中间件,两者的对比,可参考https://www.jianshu.com/p/3d15798b88d2

参考

  1. https://www.cnblogs.com/Forever-Kenlen-Ja/p/9737482.html#基本组成
  2. 关于Rabbit MQ的分布式实现的更多细节,可参考https://www.rabbitmq.com/documentation.html , 翻译文章可百度,例如https://blog.csdn.net/u013256816/article/details/71682447

你可能感兴趣的:(Rabbit MQ)