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