简介
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
历史
Rabbit科技有限公司开发了RabbitMQ,并提供对其的支持。起初,Rabbit科技是LSHIFT和CohesiveFT在2007年成立的合资企业,2010年4月被VMware旗下的SpringSource收购。RabbitMQ在2013年5月成为GoPivotal的一部分。
基本概念
RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成。
主要特性
可伸缩性:集群服务
消息持久化:从内存持久化消息到硬盘,再从硬盘加载到内存。
适用场景
1.解耦
2.最终一致性
3.广播
4.错峰与流控(秒杀业务用于流量削峰场景)
AMPQ消息路由的必要三部分:
交换器、队列、绑定。
核心组件
ConnectionFactory(连接工厂)
ActiveMQConnectionFactory,这个connectionFactory不会复用connection、session、producer、consumer,每次连接都需要重新创建connection,再创建session,然后调用session的创建新的producer或者consumer的方法,然后用完之后依次关闭,比较浪费资源。
PooledConnectionFactory会缓存connection,session,和producer,不会缓存consumer,更适合于发送者。
SingleConnectionFactory:对于建立JMS服务器链接的请求会一直返回同一个链接,并且会忽略Connection的close方法调用。
CachingConnectionFactory继承了SingleConnectionFactory(仅有一个Connection),所以它拥有SingleConnectionFactory的所有功能,同时它还新增了缓存功能,它可以缓存Session、MessageProducer和MessageConsumer。spring2.5.3之后推出的首选方案。默认情况下,cachingConnectionFactory默认只缓存一个session,针对低并发足够。sessionCacheSize =1. 默认缓存producer、consumer。
Connection(连接)
Channel(渠道)
Delivery(投递)
DeliverCallback(投递回调)
CancelCallback(取消投递回调)