RabbitMQ--概述

JMS(Java Message Service)Java消息服务

基于JVM消息代理的规范。ActiveMQ、HornetMQ是JMS实现。

AMQP(Advanced Message Queuing Protocal)

  • 高级消息队列协议,也是一个消息代理的规范,兼容JMS
  • RabbitMQ是AMQP的实现

对比

在这里插入图片描述

Spring支持

  • spring-jms提供了对JMS的支持
  • spring-rabbit提供了对AMQP的支持
  • 需要ConnectionFactory的实现来连接消息代理
  • 提供JmsTemplate、RabbitTemplate来发送消息
  • @JmsListener(JMS)、@RabbitListener(AMQP)注解在方法上监听消息代理发布的消息
  • @EnableJms、@EnableRabbit开启支持

SpringBoot自动配置

  • JmsAutoConfiguration
  • RabbitAutoConfiguration

RabbitMQ简介

RabbitMQ是一个由erlang开发的AMQP的开源实现。

核心概念

  • Message: 消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其它消息的优先权)、delivery-mode(支出该消息可能需要持久存储)等。

  • Publisher: 消息的生产者,也是一个向交换器发布消息的客户端应用程序。

  • Exchange: 交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。

    Exchange有4种类型:

    • direct(默认)
    • fanout
    • topic
    • headers
  • Queue: 消息队列,用来保存消息直到发送给消费者。它是消息的同期,也是消息的重点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到一个队列将其取走。

  • Binding: 绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以讲交换器理解成一个由绑定构成的路由表。

    Exchange和Queue的绑定可以是多对多的关系。

  • Connection: 网络拦截,比如一个TCP连接。

  • Channel: 信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接,AMQP命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁TCP都是非常昂贵的开销,所以引入了信道的概念,以复用一条TCP连接。

  • Consumer: 消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。

  • Virtual Host: 不腻主机,表示一批交换机、消息队列和相关对象。虚拟主机是共享相同的身份认真和加密环境的独立服务器域。每个vhost本质上就是一个mini版的RabbitMQ服务器,拥有自己的队列、交换器、绑定和权限机制。vhost是AMQP概念的基础,必须在连接时指定,RabbitMQ默认的vhost是 / 。

  • Broker: 表示消息队列服务器实体。

在这里插入图片描述

发布了716 篇原创文章 · 获赞 2079 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/cold___play/article/details/104193459