消息中间件(Message Queue Middleware,简称MQ),它是一个利用高效可靠的传递机制进行与平台无关的数据交流的工具。git
目前比较主流的MQ有RabbitMQ、Kafka、RocketMQ、ActiveMQ。github
一、异步(解决没必要要的阻塞):MQ容许将一些消息放入到中间件中,但又并非当即处理它,而是等须要的时候再去消费它。服务器
二、解耦(减低模块之间的耦合度):MQ在处理中插入了一个隐含的、基于数据的接口层;就像家里的电器(如冰箱、烤炉、热水器等),它们并非直接接在电路上的,而是经过插座达到通电的目的。异步
三、削峰(峰值任务的平滑处理):在访问量剧增的状况下,应用仍须要发挥做用。分布式
四、冗余(存储、补偿机制):有些状况下,处理数据的过程当中可能会失败,致使数据丢失;你能够在操做数据前先持久化一份到MQ中,而后等数据处理完成后再删掉这一数据,这样便规避了数据丢失的风险。工具
五、分布式消息传递:由于分布式的可用性、可靠性、吞吐量高、响应时间快、跨平台等特性,因此MQ很是适合分布式应用之间的消息传递。ui
JMS(Java Message Service)规范,它本质上是一套API,仅适用于Java平台上的消息规范;而且经过标准的生产、发送接口来简化企业的开发。中间件
一、JMS对象模型包含的元素对象
二、JMS消息模型blog
AMQP(Advance Message Queuing Protocol)协议是一套开放的MQ标准,支持不一样语言的不一样的MQ产品。
AMQP组件:
一、生产、消费者。
二、消息:包括有效载荷与标签;有效载荷:须要传输的数据;标签:描述有效载荷的属性;RabbitMQ经过标签决定谁改得到该消息,而消费者只能获得有效载荷。
三、信道:它是一个虚拟的链接,创建在真实的TCP、IP链接之上,全部的AMQP都经过信道传输消息;因创建TCP、IP链接很是消耗服务器资源,因此才有了信道的出现,它有点像链接池的那种感受。
四、交换器、队列、绑定、路由键:队列经过路由键绑定到交换器,生产者把消息发送到交换器,交换器再根据绑定的路由键把消息路由到对应的队列中,而后再由订阅该消息的消费者进行消费。
RabbitMQ是一款遵循AMQP规范的MQ,其具备消息确认机制、队列消息的持久化、消息拒收机制、默认交换器、mandatory(防丢失机制)。
见https://github.com/mrjdrs/rabbitmq-demo.git的rabbitmqhelloWorld。