RabbitMQ是最流行的开源消息队列系统,实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。
RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。采用该技术,我们可以实现异步处理、流量削峰、系统解耦;
RabbitMQ概念与机制
RabbitMQ中的概念模型:
- Broker:消息中间件实例,可能是单个节点也可能是运行在多节点集群上的逻辑实体
- 消息(Message):消息由消息头和消息体两部分组成。消息头中包括routing-key、priority等标准消息头以及其它自定义消息头,用于定义RabbitMQ对消息行为。消息体是字节流,包含消息内容。
- 连接(Connection):客户端与Broker之间的TCP连接
- 信道(Channel):Channel是建立在TCP连接上的逻辑(虚拟)连接。多个Channel复用同一个TCP连接,以避免建立TCP连接的巨大开销。RabbitMQ官方要求每个线程使用独立的Channel,禁止多个线程共用Channel。
- 生产者(Publisher):发送消息的客户端线程
- 消费者(Consumer):处理消息的客户端线程
- 交换机(Exchange):交换机负责将消息投递到相应的队列
- 队列(Queue):接收并保存交换机投递的消息,直至被消费者成功消费。逻辑结构遵循先进先出FIFO。
- 绑定(Binding):将队列(Queue)注册到交换机(Exchange)的路由表
- 虚拟主机(Vhost):每个Broker下可建立多个vhost,每个vhost可建立独立的Exchange、Queue、绑定及权限系统。同一个Broker下的vhost共享Connection、Channel和用户系统,就是说可以使