AMQP
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受中间件不同产品、不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。
RabbitMQ
信道:信道是生产消费者与rabbit通信的渠道,生产者发布publish或是消费者订阅subscribe一个队列都是通过信道来通信的。信道是建立在TCP连接上的虚拟连接。也就是说rabbitmq在一条TCP上建立成百上千个信道来达到多个线程处理,这个TCP被多个线程共享,每个线程对应一个信道,信道在rabbit都有唯一的ID ,保证了信道私有性,对应上唯一的线程使用。
问:为什么不建立多个TCP连接呢?原因是rabbit保证性能,系统为每个线程开辟一个TCP是非常消耗性能,每秒成百上千的建立销毁TCP会严重消耗系统性能。所以rabbitmq选择建立多个信道(建立在tcp的虚拟连接)连接到rabbit上。