0


RabbitMQ基本使用

RabbitMQ的基本使用

没有topic 使用的是AMQP协议

1.重要概念

1.Publisher

消息生产者,就是投递消息的程序。发布者 (或称为生产者) 负责生产消息并将其投递到指定的交换器上。

2.Message

消息由消息头和消息体组成,消息头用于存储与消息相关的元数据:如目标交换器的名字(exchange_name)路由键 (RountingKey)和其他可选配置 (properties) 信息。消息体为实际需要传递的数据。

3.Exchange

交换器负责接收来自生产者的消息,并将消息路由到一个或者多个队列中,如果路由不到,则返回给生产者或者直接丢弃,这取决于交换器的 mandatory 属性:

当 mandatory 为 true 时:如果交换器无法根据自身类型和路由键找到一个符合条件的队列,将该消息返回给生产者;

当 mandatory 为 false 时:如果交换器无法根据自身类型和路由键找到一个符合条件的队列,直接丢弃该消息。

4.BindingKey

交换器与队列通过 BindingKey 建立绑定关系。

5.Routingkey

基于交换器类型的规则相匹配时,消息被路由到对应的队列中生产者将消息发给交换器的时候,一般会指定一个 RountingKey,用来指定这个消息的路由规则,当 RountingKey 与 BindingKey匹配时,消息被路由到对应的队列中

6.Queue

消息队列载体,每个消息都会被投入到一个或多个队列。用于存储路由过来的消息,多个消费者可以订阅同一个消息队列,此时队列会将收到的消息将以轮询 (round-robin)的方式分发给所有消费者,即每条消息只会发送给一个消费者,不会出现一条消息被多个消费者重复消费的情况。

7.Consumer

消息消费者,就是接受消息的程序消费者订阅感兴趣的队列,并负责消费存储在队列中的消息。为了保证消息能够从队列可靠地到达消费者,RabbitMQ 提供了消息确认机(messageacknowledgement),并通过autoAck参数来进行控制。当 autoAck 为 true 时:此时消息发送出去 (写入TCP套接字) 后就认为消费成功,而不管消费者是否真正消费到这些消息。当 TCP 连接或 channel 因意外而关闭,或者消费者在消费过程之中意外宕机时,对应的消息就丢失。因此这种模式可以提高吞吐量,但会存在数据丢失的风险。当 autoAck 为 false 时:需要用户在数据处理完成后进行手动确认,只有用户手动确认完成后,RabbitMQ 才认为这条消息已经被成功处理,这可以保证数据的可靠性投递,但会降低系统的吞吐量。

8.Connection

用于传递消息的 TCP 连接。

9.Channel

消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。RabbitMQ 采用类似 NIO (非阻塞式 IO ) 的设计,通过 Channel 来复用 TCP 连接,并确保每个Channel的隔离性,就像是拥有独立的 Connection 连接。当数据流量不是很大时,采用连接复用技术可以避免创建过多的 TCP 连接而导致昂贵的性能开销。

10.Virtual Host

虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离

RabbitMQ 通过虚拟主机来实现逻辑分组和资源隔离,一个虚拟主机就是一个小型的 RabbitMQ服务器,拥有独立的队列、交换器和绑定关系。用户可以按照不同业务场景建立不同的虚拟主机,虚拟主机之间是完全独立的,你无法将 vhost1 上的交换器与vhost2 上的队列进行绑定,这可以极大的保证业务之间的隔离性和数据安全,默认的虚拟主机名为 /

11.Broker

简单来说就是消息队列服务器实体。

2.怎么发送消息

exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。

1.客户端连接到消息队列服务器,打开一channel。

2.客户端声明一个exchange,并设置相关属性。

3.客户端声明一个queue,并设置相关属性。

4.客户端使用routing key,在exchange和queue之间建立好绑定关系。

5.客户端投递消息exchange。

3.rabbit消息怎么路由

交换器、路由、绑定。

生产者把消息发布到交换器上;绑定决定了消息如何从路由器路由到特定的队列;消息最终到达队列,并被消费者接收。

消息发布到交换器时,消息将拥有一个路由键(routing key),在消息创建时设定,通过队列路由键,可以把队列绑定到交换器上。

消息到达交换器后RabbitMQ会将消息的路由键与队列的路由键进行匹配(针对不同的交换器有不同的路由规则),如果能够匹配到队列,则消息会投递到相应队列中;如果不能匹配到任何队列,消息将进入 “黑洞”。

4.rabbitmq常见的交换器

1.直连交换器

直连交换器是根据消息携带的路由键将消息投递给对应绑定键的队列

一个队列会和一个交换机绑定,除此之外再绑定一个routing_key,当消息发送的时候需要制定binding_key,

message – 直连交换机

直连交换机 – routing_key1 – 队列1

直连交换机 – routing_key1 – 队列2

直连交换机 – routing_key2 – 队列3

直连交换机 – routing_key3 – 队列4

2.扇形交换器

不分路由键 类似广播消费

message – 扇形交换机

扇形交换机–队列1

扇形交换机–队列2

扇形交换机–队列3

3.主题交换器

消费者选择性地接收消息时应该选择主题交换器。

binding key 中可以存在两种特殊字符 * 与#,用于做模糊匹配,其中 * 用于匹配一个单词,

“#”用于匹配多个单词(可以是零个)

routing key 为一个句点号 “.” 分隔的字符串(我们将被句点号 “. ” 分隔开的每一段独立的字符串称为一个单词),如“stock.usd.nyse”、“nyse.vmw”、“quick.orange.rabbit”

binding key 与 routing key 一样也是句点号 “.” 分隔的字符串

由多个工作者(workers)完成的后台任务,每个工作者负责处理某些特定的任务

4.头信息交换器(不常用性能不高)


本文转载自: https://blog.csdn.net/qq_35623417/article/details/135185557
版权归原作者 竺竺牧牧 所有, 如有侵权,请联系我们删除。

“RabbitMQ基本使用”的评论:

还没有评论