RabbitMQ的相关概念

  • RabbitMQ的相关概念

    RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗,消息队列是一种应用系统之间的通信方法 ,是通过读写队列来进行消息的通信。

    下面展示一张RabbitMQ消息通信过程 ,参考博客 https://www.cnblogs.com/ysocean/p/9240877.html

    图片:

    • broker:简单来说就是消息队列的实体,本图片中的就是RabbitMQ服务器

    • Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列

      生产者将消息返送到Exchange,由Exchange将消息路由到一个或多个Queue中,Exchange有几种类型,不同的类型有不同的路由策略。

    • 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

猜你喜欢

转载自www.cnblogs.com/haizhilangzi/p/12301668.html