RabbitMQ的相关概念
Posted haizhilangzi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ的相关概念相关的知识,希望对你有一定的参考价值。
RabbitMQ的相关概念
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗,消息队列是一种应用系统之间的通信方法 ,是通过读写队列来进行消息的通信。
下面展示一张RabbitMQ消息通信过程 ,参考博客 https://www.cnblogs.com/ysocean/p/9240877.html
图片:
broker:简单来说就是消息队列的实体,本图片中的就是RabbitMQ服务器
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列
生产者将消息返送到Exchange,由Exchange将消息路由到一个或多个Queue中,Exchange有几种类型,不同的类型有不同的路由策略。
- 常见的路由类型如下:参考官网 https://www.rabbitmq.com/getstarted.html
Queue:RabbitMQ的内部对象,消息队列的载体。
RabbitMQ的消息只能存储在Queue,生产者生产消息并投送到Queue中,消费者从Queue中获取消息并消费。多个消费者可以订阅同一个Queue,这时消息会分配给多个消费者进行处理,并不是每个消费者收到所有的消息并处理。
Binding:绑定,是一种操作,它的作用就是把exchange和queue按照路由规则绑定起来,一般会指定一个binding key
Routing Key(路由键): 一个String值,用于定义路由规则,在队列绑定的时候需要指定路由键,在生产者发布消息的时候需要指定路由键,当消息的路由键和队列绑定的路由键匹配时,消息就会发送到该队列 。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离,RabbitMQ可以通过多个虚拟主机来分发消息,且虚拟不同的虚拟主机之间是个例的,单独的。用户只能访问与之对应的vhost
producer:消息生产者,就是投递消息的程序
consumer:消息消费者,就是接受消息的程序
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个
会话任务RabbitMQ支持消息的持久化,也就是数据写在磁盘上。消息队列持久化包括三部分:
1、exchange持久化,在声明时指定durable=>1
2、queue持久化,在声明时指定durable=>1
3、消息持久化,在投递时指定delivery_mode=>2(1代表非持久化)
如果exchange和queue都是持久化的,那么他们之间的binding也是持久化的。如果exchange和queue两者之间有一个持久化,一个非持久化,就不允许建立绑定。持久化的好处在服务器重启的情况下,也不会丢失数据。
消息队列的使用过程如下
客户端连接到消息队列服务器,打开一个channel
客户端声明一个exchange,并设置相关属性
客户端声明一个queue,并设置相关属性
客户端使用routing key,在exchange和queue之间建立绑定关系
客户端投递消息到exchange.
exchange接受到消息后,根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。exchange有几个类型,完全根据key进行投递的叫做Direct交换机。列如: 绑定时设置 routing key为“a",那么客户端提交的小厮,只有设置了key为“a"才会投递到队列中。
参考博客: https://www.cnblogs.com/williamjie/p/9481774.html
? https://www.cnblogs.com/ysocean/p/9240877.html
官方示例: http://www.rabbitmq.com/tutorials/tutorial-one-java.html
以上是关于RabbitMQ的相关概念的主要内容,如果未能解决你的问题,请参考以下文章