1、概述:
1、大多数应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力
2、消息服务中两个重要概念
消息代理-message broker 和目的地-destination
当消息发送者发送消息后,将由消息代理接管,消息代理保证消息传递到制定目的地。
3、消息队列主要有两种形式的目的地
1、队列:点对点通信 point-to-point
2、主题:发布publish、订阅/subscribe消息通信
4、点对点式:
消息发送者发送消息,消息代理将其放入到一个队列中,消息接收者从队列中获取消息内容,消息读取后被移除队列。
消息读取后被移除队列
消息只有唯一的发送者和接受者,但不是说只能有一个接收者。
5、发布订阅式
发送者(发布者)发送消息到主题,多个接收者(订阅者)监听(订阅这个主题),那么就会在消息到达时同时受到消息
6、JMS(java message service)java消息服务
基于JVM消息代理的规范。ActiveMQ、HornetMQ是JMS实现
7、AMQP(advanced message queuing protocol)
高级消息队列协议,也是一个消息代理的规范,兼容JMS
rabbitMQ是AMQP的实现;
8、spring支持
--spring-jms提供了对jms的支持
--spring-rabbit提供了对AMQP的支持
--需要ConnectionFactory的实现来连接消息代理
--提供JmsTemplate、RabbitTemplate来发送消息
--@JmsListener(JMS)、@RabbitListener(AMQP)注解在方法上监听消息代理发布的消息
--@EnableJms、@EnableRabbit开启支持
9、Springboot 自动配置
--jmsAutoConfiguration
--RabbitAutoConfiguration
RabbitMQ简介
rabbitMQ简介:
RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue Protocol)的开源实现。
核心概念:
Message消息
消息是不具名的,它是由消息头和消息体组成。消息体是不透明的,而消息头则是由一系列的可选属性组成,这些属性包括routing-key路由键、priority(相对于其它消息的优先权)、delivery-mode指出该消息可能需要持久性存储等。
Publisher
消息的生产者,也是一个向交换器发布消息的客户端应用程序
Exchange
交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。
exchange有四种类型,direct默认,fanout,topic和headers,不同类型的exchange转发消息的策略有所区别;
RabbitMQ稳定性可靠性高;流行的消息中间件;
消息:消息头(路由键,优先权,持久存储),消息体(不透明);
交换器:将消息路由到队列;
Direct:能实现jms中点对点消息模型;
后边三个可以实现发布订阅模型;
消息是通过交换器来决定法发往那个队列;
消息队列: 保存消息的容器;位于消息服务器。一直等到来人把他取走才不复存在
交换器与消息队列的关联规则被称为绑定;
交换器:消息队列=多对多
一个tcp连接来开多个信道;(chanel)
RabitMQ服务器内部划分为很多虚拟主机;
里边的每一个就是一个小的rabitmq
独立运行;他们之间每个都是隔离的;每个虚拟主机有自己的消息队列,交换器,路由规则;
还有自己的权限控制戒指,身份认证加密信息等;
链接rabitmq的时候,默认链接里边的/;用路径来划分;
RabbitMQ运行机制:
1、有生产者发送消息,到达消息服务器之后,经过转换器的绑定对应策略路由到消息队列,消息服务器再与消费者做tcp连接,一个连接中有多个信道,消费者取出消息后,消息从消息队列中消失。