Java与RabbitMQ(六)RabbitMQ几个重要的概念、术语详解

2023-05-04 20:10:33 浏览数 (1)

本节内容主要详细介绍RabbitMQ中几个重要的概念以及术语。

RabbitMQ 简单介绍

RabbitMQ是流行的开源消息队列系统,用Erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。这里我们介绍RabbitMQ中主要涉及的几个重要概念,理解后希望在实际使用中会加深理解。

消息队列服务器

可以为 客户端程序提供消息队列、路由选择和 目录服务。消息队列服务器可以用于:

  • 为独立客户提供消息 路由选择和会话集中。
  • 在通过 路由链接的站点之间提供消息路由选择。
  • 创建队列并存储用于从属客户的消息。

RabbitMQ 消息模型

RabbitMQ消息发送时,生产者是不知道消息是否发送到某个队列中去了,生产者仅仅只能将消息发送给某个交换器。

Broker

RabbbitMQ消息队列代理服务器实体。

Producer

发送消息的应用程序。

Consumer

接收消息的用户程序。

Exchange

交换器,生产者直接将消息发送给交换器。交换器将消息分发给指定的队列。它指定消息按什么规则,路由到哪个队列。

Binding

绑定,指的是交换器和队列之间的关系。它的作用就是把exchange和queue按照路由规则绑定起来。

Routing Key

路由关键字,exchange根据这个关键字进行消息投递。

vhost

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

Channel

消息通道,包含了大量的API可用于编程。在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

Connection

在客户创建一个到某个虚拟主机的连接。

ConnectionFactory

连接工厂类。可以创建一个连接。

使用注意事项

消息队列的使用过程大概如下:

  • 客户端连接到消息队列服务器,打开一个channel。
  • 客户端声明一个exchange,并设置相关属性。  
  • 客户端声明一个queue,并设置相关属性。
  • 客户端使用routing key,在exchange和queue之间建立好绑定关系。
  • 客户端投递消息到exchange。exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。

exchange也有几个类型,完全根据key进行投递的叫做Direct交换机,例如,绑定时设置了routing key为”abc”,那么客户端提交的消息,只有设置了key为”abc”的才会投递到队列。对key进行模式匹配后进行投递的叫做Topic交换机,符号”#”匹配一个或多个词,符号”*”匹配正好一个词。例如”abc.#”匹配|abc.def.ghi”,”abc.*”只匹配”abc.def”。 还有一种不需要key的,叫做Fanout交换机,它采取广播模式,一个消息进来时,投递到与该交换机绑定的所有队列。

RabbitMQ支持消息的持久化,也就是数据写在磁盘上,为了数据安全考虑,我想大多数用户都会选择持久化。消息队列持久化包括3个部分:

  • exchange持久化,在声明时指定durable 为 1
  • queue持久化,在声明时指定durable 为 1
  • 消息持久化,在投递时指定delivery_mode 为 2(1是非持久化)

如果exchange和queue都是持久化的,那么它们之间的binding也是持久化的。如果exchange和queue两者之间有一个持久化,一个非持久化,就不允许建立绑定。

0 人点赞