本节内容主要详细介绍RabbitMQ中几个重要的概念以及术语。
RabbitMQ是流行的开源消息队列系统,用Erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。这里我们介绍RabbitMQ中主要涉及的几个重要概念,理解后希望在实际使用中会加深理解。
可以为 客户端程序提供消息队列、路由选择和 目录服务。消息队列服务器可以用于:
RabbitMQ消息发送时,生产者是不知道消息是否发送到某个队列中去了,生产者仅仅只能将消息发送给某个交换器。
RabbbitMQ消息队列代理服务器实体。
发送消息的应用程序。
接收消息的用户程序。
交换器,生产者直接将消息发送给交换器。交换器将消息分发给指定的队列。它指定消息按什么规则,路由到哪个队列。
绑定,指的是交换器和队列之间的关系。它的作用就是把exchange和queue按照路由规则绑定起来。
路由关键字,exchange根据这个关键字进行消息投递。
虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
消息通道,包含了大量的API可用于编程。在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
在客户创建一个到某个虚拟主机的连接。
连接工厂类。可以创建一个连接。
消息队列的使用过程大概如下:
exchange也有几个类型,完全根据key进行投递的叫做Direct交换机,例如,绑定时设置了routing key为”abc”,那么客户端提交的消息,只有设置了key为”abc”的才会投递到队列。对key进行模式匹配后进行投递的叫做Topic交换机,符号”#”匹配一个或多个词,符号”*”匹配正好一个词。例如”abc.#”匹配|abc.def.ghi”,”abc.*”只匹配”abc.def”。 还有一种不需要key的,叫做Fanout交换机,它采取广播模式,一个消息进来时,投递到与该交换机绑定的所有队列。
RabbitMQ支持消息的持久化,也就是数据写在磁盘上,为了数据安全考虑,我想大多数用户都会选择持久化。消息队列持久化包括3个部分:
如果exchange和queue都是持久化的,那么它们之间的binding也是持久化的。如果exchange和queue两者之间有一个持久化,一个非持久化,就不允许建立绑定。