01-RabbitMQ入门基础

RabbitMQ 简介

  • 参考资料
    • https://www.cnblogs.com/sgh1023/p/11217017.html
    • https://www.jianshu.com/p/dae5bbed39b1
  • RabbitMQ:是一个在AMQP(Advanced Message Queuing Protocol 高级消息队列协议)基础上实现的,可复用的企业消息系统,可用于大型软件系统各个模块之间的高效通信,支持高并发,支持可扩展。

AMQP

  • AMQP:即Advanced Message Queuing Protocol,是一个提供统一消息服务的高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
  • 基于此协议的客户端与消息中间件可传递消息,并不受平台和语言的限制。
  • AMQP的协议模型

  • AMQP协议模型有三部分组成:生产者、消费者和服务端。

 

  • 通信过程:
    • 生产者是投递消息的一方,首先连接到Server,建立一个连接,开启一个信道
    • 然后生产者声明交换器和队列,设置相关属性,并通过路由键将交换器和队列进行绑定
    • 同理,消费者也需要进行建立连接,开启信道等操作,便于接收消息。
    • 接着生产者就可以发送消息,发送到服务端中的虚拟主机
    • 虚拟主机中的交换器根据路由键选择路由规则,然后发送到不同的消息队列中
    • 订阅了消息队列的消费者就可以获取到消息,进行消费。
    • 最后还要关闭信道和连接。

消息队列

  • MQ:全称为Message Queue消息队列,是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。
  • 消息传递:指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信。队列的使用除去了接收和发送应用程序同时执行的要求。
  • 在生产中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。

RabbitMQ特点

  • 开源、性能优秀,稳定性保障
  • 提供可靠性消息投递模式、返回模式
  • 与Spring AMQP完美整合,API丰富
  • 集群模式丰富,表达式配置,HA模式,镜像队列模型
  • 保证数据不丢失的前提做到高可靠性、可用性

MQ典型应用场景

  • 异步处理:把消息放入消息中间件中,等到需要的时候再去处理。
  • 流量削峰:例如秒杀活动,在短时间内访问量急剧增加,使用消息队列,当消息队列满了就拒绝响应,跳转到错误页面,这样就可以使得系统不会因为超负载而崩溃。
  • 日志处理
  • 应用解耦:假设某个服务A需要给许多个服务(B、C、D)发送消息,当某个服务(例如B)不需要发送消息了,服务A需要改代码再次部署;当新加入一个服务(服务E)需要服务A的消息的时候,也需要改代码重新部署;另外服务A也要考虑其他服务挂掉,没有收到消息怎么办?要不要重新发送呢?是不是很麻烦,使用MQ发布订阅模式,服务A只生产消息发送到MQ,B、C、D从MQ中读取消息,需要A的消息就订阅,不需要了就取消订阅,服务A不再操心其他的事情,使用这种方式可以降低服务或者系统之间的耦合。

相关概念介绍

  • Broker(Server):简单来说就是消息队列服务器实体。
  • Connection:连接,应用程序与Server的网络连接,TCP连接。
  • Exchange:消息交换器,它指定消息按什么规则,路由到哪个队列。
  • Queue:消息队列载体,每个消息都会被投入到一个或多个队列,供消费者消费。
  • Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来,绑定中可以包含一个或者多个RoutingKey。
  • Routing Key:路由关键字,exchange根据这个关键字进行消息投递;路由键通常为一个“.”分割的字符串,例如“com.rabbitmq”。
  • vhost:虚拟主机,一个broker(Server)里可以开设多个vhost,用作不同用户的权限分离。一个虚拟主机里面可以有若干个Exchange和Queue,同一个虚拟主机里面不能有相同名称的Exchange或Queue。
  • producer:消息生产者,就是投递消息的程序。
  • consumer:消息消费者,就是接受消息的程序。
  • channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

RabbitMQ使用流程

  • AMQP模型中,消息通信流程:消息在producer中产生,发送到MQ的exchange上,exchange根据消息的key和已经设置的binding,选择对应的路由方式发到相应的Queue上,Queue又将消息发送给consumer,消息从queue到consumer有push和pull两种方式。
  • 具体流程如下:
  1. 客户端连接到消息队列服务器,打开一个channel。
  2. 客户端声明一个exchange,并设置相关属性。
  3. 客户端声明一个queue,并设置相关属性。
  4. 客户端使用routing key,在exchange和queue之间建立好绑定关系。
  5. 客户端投递消息到exchange。
  • exchange类型有四种:
    • Direct Exchange
    • Topic Exchange
    • Fanout Exchange
    • Headers Exchange
  • direct exchange:完全根据key进行投递的叫做Direct交换器。例如,绑定时设置了routing key为”abc”,那么客户端提交的消息,只有设置了key为”abc”的才会投递到队列。
  • topic exchange:将所有发送到Topic Exchange的消息被转发到所有RoutingKey中指定的Topic的队列上面。Topic Exchange将RoutingKey和某Topic进行模糊匹配,其中“.”用来匹配一个词,“#”用于匹配一个或者多个词。例如“com.#”能匹配到“com.rabbitmq.oa”和“com.rabbitmq”;而"login."只能匹配到“com.rabbitmq”。

            

 

  • Fanout Exchange:该类型不处理路由键,会把所有发送到交换器的消息路由到所有绑定的队列中。优点是转发消息最快,性能最好。 
  • Headers Exchange:该类型的交换器不依赖路由规则来路由消息,而是根据消息内容中的headers属性进行匹配。headers类型交换器性能差,在实际中并不常用。

         

 

 

RPC

  • RPC:即客户端远程调用服务端的方法 ,使用MQ可以实现RPC的异步调用,基于Direct交换器实现,流程如下:
  1. 客户端即是生产者就是消费者,向RPC请求队列发送RPC调用消息,同时监听RPC响应队列。
  2. 服务端监听RPC请求队列的消息,收到消息后执行服务端的方法,得到方法返回的结果
  3. 服务端将RPC方法 的结果发送到RPC响应队列
  4. 客户端(RPC调用方)监听RPC响应队列,接收到RPC调用结果。

RabbitMQ安装

 

 

 

RabbitMQ常用的命令

  • 启动监控管理器:rabbitmq-plugins enable rabbitmq_management
  • 关闭监控管理器:rabbitmq-plugins disable rabbitmq_management
  • 启动rabbitmq:rabbitmq-service start
  • 关闭rabbitmq:rabbitmq-service stop
  • 查看所有的队列:rabbitmqctl list_queues
  • 清除所有的队列:rabbitmqctl reset
  • 关闭应用:rabbitmqctl stop_app
  • 启动应用:rabbitmqctl start_app

用户和权限设置

  • 添加用户:rabbitmqctl add_user username password
  • 分配角色:rabbitmqctl set_user_tags username administrator
  • 新增虚拟主机:rabbitmqctl add_vhost vhost_name
  • 将新虚拟主机授权给新用户rabbitmqctl set_permissions -p vhost_name username ".*" ".*" ".*"(后面三个”*”代表用户拥有配置、写、读全部权限)

角色说明

  • 超级管理员(administrator):可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。
  • 监控者(monitoring):可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
  • 策略制定者(policymaker):可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
  • 普通管理者(management):仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。
  • 其他:无法登陆管理控制台,通常就是普通的生产者和消费者。

 

 

 

posted @ 2022-05-27 01:02  西瓜的春天  阅读(33)  评论(0)    收藏  举报