RabbitMQ简介


2007年,Rabbit技术公司基于AMQP标准开发的RabbitMQ1.0发布。RabbitMQ采用Erlang语言开发。Erlang语言(二郎神)由Ericson设计,专门为开发高并发和分布式系统的一种语言,在电信领域使用广泛。

RabbitMQ基础架构如下图:

RabbitMQ中的相关概念:

  • Broker:接收和分发消息的应用,RabbitMQServer就是MessageBroker
  • Virtualhost:出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQserver提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue等
  • Connection:publisher/consumer和broker之间的TCP连接
  • Channel:如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCPConnection的开销将是巨大的,效率也较低。Channel是在connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的channel进行通讯,AMQPmethod包含了channelid帮助客户端和messagebroker识别channel,所以channel之间是完全隔离的。Channel作为轻量级的Connection 极大减少了操作系统建立TCPconnection的开销
  • Exchange:message到达broker的第一站,根据分发规则,匹配查询表中的routingkey,分发消息到queue中去。常用的类型有:direct(point-to-point),topic(publish-subscribe)andfanout(multicast)
  • Queue:消息最终被送到这里等待consumer取走
  • Binding:exchange和queue之间的虚拟连接,binding中可以包含routingkey。Binding信息被保存到exchange中的查询表中,用于message的分发依据

RabbitMQ提供了6种工作模式

简单模式、workqueues、Publish/Subscribe发布与订阅模式、Routing 路由模式、Topics主题模式、RPC远程调用模式(远程调用,不太算MQ)。
官网对应模式介绍:https://www.rabbitmq.com/getstarted.html

JMS

JMS 是 API 规范接口,类比 JDBC。
AMQP 是协议,类比HTTP。

  • JMS 即 Java 消息服务(JavaMessage Service)应用程序接口,是一个 Java 平台中关于面向消息中间件的API
  • JMS 是 JavaEE 规范中的一种,类比JDBC
  • 很多消息中间件都实现了JMS规范,例如:ActiveMQ。RabbitMQ 官方没有提供 JMS 的实现包,但是开源社区有