RabbitMQ实战1


RabbitMQ简介

RabbitMQ是使用Erlang开发的一款遵循AMQP协议的开源消息队列。

消息

消息分为两部分内容: 有效载荷(payload) 和 标签(label)。 有效载荷: 是实际要传输的数据,它可以是任何内容,一个JSON数组或者是一段二进制流。 标签: 标签描述了有效载荷,RabbitMQ用它来决定谁将获取消息的拷贝。

在消息路由过程中,标签并没有随有效载荷一起传递。RabbitMQ甚至不会告诉消费者究竟 是那个生产者发送的消息。在实际设计中,如果在处理消息时,需要明确知道究竟是哪个生产者 发布的消息,则可将发送者信息放入有效载荷中。

信道(channel)

不论是生产者还是消费者,它们都是通过TCP与RabbitMQ建立连接。但RabbitMQ在“真实的”TCP 连接之上又实现了信道的虚拟连接。AMQP命令都是通过信道发送出去的。每条信道都会被指派 一个唯一的ID(AMQP库会帮你管理ID)。不论是发布消息,订阅队列或是接收消息,这些动作都是 通过信道来完成的。 RabbitMQ没有直接通过TCP连接来收发数据的最主要原因在于:TCP的频繁拆建对操作系统来说是 非常昂贵的开销。假如应用程序的业务非常复杂,每个应用程序都建立若干的TCP连接到Rabbit 这不仅会造成TCP连接的巨大浪费,而且还会造成很快碰到RabbitMQ服务器的性能瓶颈。 信道的引入很好的解决以上问题:在一条TCP连接上创建信道数量是没有特殊限制的,并且每条信道 又是隔离的。

如果说AMQP是一个加强版的传输层,那么RabbitMQ就可以看做软件的路由器了。

AMQP