MQ概念温习

一.我理解的MQ核心组件

MQ由一般由三个核心组件组成-> producer -> comsumer -> broker。

二.组件介绍

其中生产者和消费者是比较容易理解的,一个是生产消息推送到队列,一个是接收消息进行消息的消费,其中消费过程可能涉及到ACK(ACK即消息确认机制), 比较复杂的就是broker(中间人,感觉有点像抓包的原理,即双向代理)

broker(消息中转角色),负责存储消息,转发消息。 可以理解为消息队列服务器,提供了消息的接收、存储、拉取和转发服务。 broker 是RocketMQ的核心,它不不能挂的,所以需要保证 broker 的高可用。

三.Broker的组成

Broker视为MQ的核心,他也是一个服务,那它自然也是有很多概念(不叫组件是因为有些确实只能作为概念)所组成,以Rabbit为例,其有Exchange,Channel,Queue

在AMQP模型中,Exchange是接受生产者消息并将消息路由到消息队列的关键组件。ExchangeType和Binding决定了消息的路由规则。所以生产者想要发送消息,首先必须要声明一个Exchange和该Exchange对应的Binding。可以通过 ExchangeDeclare和BindingDeclare完成。在Rabbit MQ中,声明一个Exchange需要三个参数:ExchangeName,ExchangeType和Durable。ExchangeName是该Exchange的名字,该属性在创建Binding和生产者通过publish推送消息时需要指定。ExchangeType,指Exchange的类型,在RabbitMQ中,有三种类型的Exchange:direct ,fanout和topic,不同的Exchange会表现出不同路由行为。Durable是该Exchange的持久化属性,这个会在消息持久化章节讨论。声明一个Binding需要提供一个QueueName,ExchangeName和BindingKey。

Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销将是巨大的,效率也较低。Channel是在connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的channel进行通讯,AMQP method包含了channel id帮助客户端和message broker识别channel,所以channel之间是完全隔离的。Channel作为轻量级的Connection极大减少了操作系统建立TCP connection的开销。

Queue:存放message的对列,每个消息都会被投到一个或多个队列。

你可能感兴趣的:(rabbitmq,java,后端)