学习主题:RabbitMQ

  1. 什么是RabbitMQ?

是一种消息中间件

  1. 什么是Erlang?

他是Erlang的环境依赖

  1. 如何在Linux环境中安装RabbitMQ?

  1. 为什么要用RabbitMQ
  1. 什么要使用RabbitMQ?

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

  1. RabbitMQ解决了什么问题?

消息中转,异步处理,流量销锋,应用解耦

  1. 消息队列基础讲解
  1. 什么是Provider?

消息提供者,提供消息服务

  1. 什么是Consumer?

消息消费者,消费消息提供者的服务

  1. 什么是队列?

队列就像存放了商品的仓库或者商店,是生产商品的工厂和购买商品的用户之间的中转站

  1. 队列里存储了什么?

队列可以存储很多信息,因为它基本上是一个无限制的缓冲区,前提是你的机器有足够的存储空间。

  1. 队列和应用程序的关系是什么?

多个生产者可以将消息发送到同一个队列中,多个消息者也可以只从同一个队列接收数据。

  1. 消息队列入门案例-环境搭建
  1. 如果现在项目中使用RabbitMQ需要添加Spring Boot的什么启动器?

<!-- rabbitmq -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-amqp</artifactId>

</dependency>

  1. 在项目的全局配置文件中需要配置哪些内容?

#项目名(随便起)/ RabbitMQ的ip/端口

spring.application.name=springcloud-rabbitmq

spring.rabbitmq.host=192.168.179.136

spring.rabbitmq.port=5672

#RabbitMQ的用户名与密码

spring.rabbitmq.username=mquser

spring.rabbitmq.password=mquser

  1. 消息队列入门案例-编码
  1. 创建队列对象的名称是什么?

AmqpTemplate

private AmqpTemplate rabbitAmqpTemplate;

  1. 能够发送消息的方法名称是什么?

convertAndSend

this.rabbitAmqpTemplate.convertAndSend("hello-queue-队列名称保持一致", msg);

  1. 监听队列的注解名称是什么?

RabbitListener

  1. RabbitMQ原理讲解
  1. 什么是交换器?

发布与订阅完全匹配

  1. 常见的交换器类型有哪些?

Direct交换器(发布与订阅完全匹配)

Topic交换器(主题,规则匹配)

Fanout交换器(广播)

  1. 什么是Routing-key?

路由键

  1. 什么是Channel?

Channel 中文叫做信道,是 TCP 里面的虚拟链接

  1. 交换器与队列的关系是什么?

交换器是通过路由键和队列绑定在一起的,如果消息拥有的路由键跟队列和交换器的 路由键匹配,那么消息就会被路由到该绑定的队列中。也就是说,消息到队列的过程中,消息首先会经过交换器,接下来交换器在通过路由 键匹配分发消息到具体的队列中。路由键可以理解为匹配的规则。

  1. RabbitMQ为什么需要信道?为什么不使用TCP协议直接通信

TCP 的创建和销毁开销特别大。创建需要 3 次握手,销毁需要 4 次分手。

如果不用信道,应用程序就会以TCP 链接 Rabbit,高峰时每秒成千上万条链接会造成资源巨大的浪费,而且操作系统每秒处理 TCP 链接数也是有限制的,必定造成性能瓶颈。

信道的原理是一条线程一条通道,多条线程多条通道同用一条 TCP 链接。 一条 TCP 链接可以容纳无限的信道,即使每秒成千上万的请求也不会成为性能的瓶颈。

Direct交换器-搭建环境

  1. 什么是Direct交换器?

发布与订阅完全匹配, 只有路由键完全匹配消费者才能消费到消息

  1. 如何在全局配置文件中配置交换器名称?

在配置文件中设置交换器的名称,例如: mq.config.exchange=log-direct

在消息发送方使用@value注解将配置文件中的值注入到对应的变量中,调用rabbiteTemplate对象的convertAndSend方法想指定的交换器通过指定的路由键想rabbitmq发送消息

在消息消费者使用@ RabbitListener注解设置交换器名称和队列名称和路由键,监听对应的交换机,接收指定路由键的消息.

  1. 如何在全局配置文件中配置队列名称?

#设置交换器的名称

mq.config.exchange=log.topic

#info 队列名称

mq.config.queue.info=http://log.info

#error 队列名称

mq.config.queue.error=log.error

#log 队列名称

mq.config.queue.logs=log.all

  1. 如何在全局配置文件中配置路由键?

@RabbitListener(bindings = @QueueBinding(

exchange = @Exchange(value = "${mq.config.exchange}", type = ExchangeTypes.TOPIC),

value = @Queue(value = "${mq.config.queue.error}", autoDelete = "true"),

key = "*.log.error")

  1. Direct交换器-编写消费者
  1. @RabbitHandler的作用是什么?

接收从消息队列中存放的消息

  1. @RabbitListener注解中的bindings属性的作用是什么?
  2. @QueueBinding注解中的value属性的作用是什么?
  3. @QueueBinding注解中的exchange属性的作用是什么?
  4. @QueueBinding注解中的key属性的作用是什么?
  5. @Exchange注解中的value属性的作用是什么?
  6. @Exchange注解中的type属性的作用是什么?

* @QueueBinding value:绑定队列的名称

* exchange:配置交换器

* key:路由键 :接收以el表达式内部代码格式结尾的消息

* @Queue value:配置队列名称

* autoDelete:是否是一个可删除的临时队列

*

* @Exchange value:为交换器起个名称

* type:指定具体的交换器类型

  1. Direct交换器-编写生产者
  1. AmqpTemplate中的converteAndSend(arg0,arg1,arg2)中的三个参数分别表示什么含义?

* 第一个参数表示 交换器的名称

* 第二个参数表示 路由键

* 第三个参数表示 消息,将要发送的消息

  1. Topic交换器-搭建环境
  1. 什么是Topic交换器?

Topic交换器(主题,规则匹配)

  1. Topic交换器-编写消费者
  1. 如何在消息消费者的注解中指定交换器与路由规则?

通过@RabbitListener注解

  1. Fanout交换器-搭建环境
  1. 什么是Fanout交换器?

Fanout交换器(广播),会将消息转发给每一个节点

  1. 什么是服务注册中心
  2. 什么是服务的注册中心?

服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来存储服务信息,譬如提供者 url 串、路由信息等。服务注册中心是SOA 架构中最基础的设施之一。

  1. 服务的注册中心的作用是什么?

服务的注册 服务的发现

  1. 常见的注册中心有哪些?

Dubbo 的注册中心 Zookeeper Sringcloud 的注册中心 Eureka

  1. 注册中心解决了什么问题
  1. 注册中心主要解决了什么问题?

服务管理 服务的依赖关系管理

  1. 什么是Eureka注册中心
  1. 什么是Eureka注册中心?

Eureka 是 Netflix 开发的服务发现组件,本身是一个基于 REST 的服务。Spring Cloud 将它集成在其子项目 spring-cloud-netflix 中,以实现 Spring Cloud 的服务注册于发现,同时 还提供了负载均衡、故障转移等能力。

  1. Eureka注册中心有几种角色?每种角色的代表什么?




rabbitMQ vm_memory_high_watermark 配置_配置文件