RabbitMQ使用指南
前置概念了解:
什么是AMQP 和 JMS?
AMQP:即Advanced Message Queuing Protocol,是一个应用层标准高级消息队列协议,提供统一消息服务。是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。
JMS:即Java消息服务(Java Message Service)应用程序接口,由sun公司提出,并且sun公司定义好了接口。包括create、send、recieve。只要想使用它,就得实现它定义的接口。 消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。不好的地方是语言层面的限制,只能为JAVA,这其实稍微有点和微服务的观点相违背。要求语言只能是JAVA,而不能是py等。
常见的MQ产品
ActiveMQ:基于JMS,Apache
RocketMQ:(Rocket,火箭)阿里巴巴的产品,基于JMS,目前由Apache基于会维护
Kafka:分布式消息系统,亮点:吞吐量超级高,没秒中数十万的并发。
RabbitMQ:(Rabbit,兔子)由erlang语言开发,基于AMQP协议,在erlang语言特性的加持下,RabbitMQ稳定性要比其他的MQ产品好一些,而且erlang语言本身是面向高并发的编程的语言,所以RabbitMQ速度也非常快。且它基于AMQP协议,对分布式、微服务更友好。
基础概念
中文名 | 英文名 | 描述 |
---|---|---|
生产者 | Producer | 消息的发送者,可以将消息发送到交换机 |
消费者 | Consumer | 消息的接收者,从队列中获取消息并进行消费 |
交换机 | Exchange | 接收生产者发送的消息,并根据路由键发送给指定队列 |
队列 | Queue | 存储从交换机发来的消息 |
交换机类型 | type | 不同类型的交换机转发消息方式不同 |
发布/订阅模式 | fanout | 广播消息给所有绑定交换机的队列 |
路由模式 | direct | 根据路由键发送消息 |
通配符模式 | topic | 根据路由键的匹配规则发送消息 |
5种消息模式:
1、简单模式
一个生产者、一个消费者
2、工作模式
一个生产者、多个消费者,消费者之间竞争消费
3、发布/订阅模式
一个生产者,一个转换机,多个消费者。转换机绑定队列,消费者仅消费订阅的队列消息
4、路由模式
一个生产者,一个转换机,多个消费者。转换机根据key绑定队列
5、通配符模式
一个生产者,一个转换机,多个消费者。转换机根据key值匹配绑定队列
中间件、框架入门很简单,深入原理需理解源码。