学习主题:RabbitMQ
- 什么是RabbitMQ?
是一种消息中间件
- 什么是Erlang?
他是Erlang的环境依赖
- 如何在Linux环境中安装RabbitMQ?
- 为什么要用RabbitMQ
- 什么要使用RabbitMQ?
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
- RabbitMQ解决了什么问题?
消息中转,异步处理,流量销锋,应用解耦
- 消息队列基础讲解
- 什么是Provider?
消息提供者,提供消息服务
- 什么是Consumer?
消息消费者,消费消息提供者的服务
- 什么是队列?
队列就像存放了商品的仓库或者商店,是生产商品的工厂和购买商品的用户之间的中转站
- 队列里存储了什么?
队列可以存储很多信息,因为它基本上是一个无限制的缓冲区,前提是你的机器有足够的存储空间。
- 队列和应用程序的关系是什么?
多个生产者可以将消息发送到同一个队列中,多个消息者也可以只从同一个队列接收数据。
- 消息队列入门案例-环境搭建
- 如果现在项目中使用RabbitMQ需要添加Spring Boot的什么启动器?
<!-- rabbitmq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
- 在项目的全局配置文件中需要配置哪些内容?
#项目名(随便起)/ 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
- 消息队列入门案例-编码
- 创建队列对象的名称是什么?
AmqpTemplate
private AmqpTemplate rabbitAmqpTemplate;
- 能够发送消息的方法名称是什么?
convertAndSend
this.rabbitAmqpTemplate.convertAndSend("hello-queue-队列名称保持一致", msg);
- 监听队列的注解名称是什么?
RabbitListener
- RabbitMQ原理讲解
- 什么是交换器?
发布与订阅完全匹配
- 常见的交换器类型有哪些?
Direct交换器(发布与订阅完全匹配)
Topic交换器(主题,规则匹配)
Fanout交换器(广播)
- 什么是Routing-key?
路由键
- 什么是Channel?
Channel 中文叫做信道,是 TCP 里面的虚拟链接
- 交换器与队列的关系是什么?
交换器是通过路由键和队列绑定在一起的,如果消息拥有的路由键跟队列和交换器的 路由键匹配,那么消息就会被路由到该绑定的队列中。也就是说,消息到队列的过程中,消息首先会经过交换器,接下来交换器在通过路由 键匹配分发消息到具体的队列中。路由键可以理解为匹配的规则。
- RabbitMQ为什么需要信道?为什么不使用TCP协议直接通信
TCP 的创建和销毁开销特别大。创建需要 3 次握手,销毁需要 4 次分手。
如果不用信道,应用程序就会以TCP 链接 Rabbit,高峰时每秒成千上万条链接会造成资源巨大的浪费,而且操作系统每秒处理 TCP 链接数也是有限制的,必定造成性能瓶颈。
信道的原理是一条线程一条通道,多条线程多条通道同用一条 TCP 链接。 一条 TCP 链接可以容纳无限的信道,即使每秒成千上万的请求也不会成为性能的瓶颈。
Direct交换器-搭建环境
- 什么是Direct交换器?
发布与订阅完全匹配, 只有路由键完全匹配消费者才能消费到消息
- 如何在全局配置文件中配置交换器名称?
在配置文件中设置交换器的名称,例如: mq.config.exchange=log-direct
在消息发送方使用@value注解将配置文件中的值注入到对应的变量中,调用rabbiteTemplate对象的convertAndSend方法想指定的交换器通过指定的路由键想rabbitmq发送消息
在消息消费者使用@ RabbitListener注解设置交换器名称和队列名称和路由键,监听对应的交换机,接收指定路由键的消息.
- 如何在全局配置文件中配置队列名称?
#设置交换器的名称
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
- 如何在全局配置文件中配置路由键?
@RabbitListener(bindings = @QueueBinding(
exchange = @Exchange(value = "${mq.config.exchange}", type = ExchangeTypes.TOPIC),
value = @Queue(value = "${mq.config.queue.error}", autoDelete = "true"),
key = "*.log.error")
- Direct交换器-编写消费者
- @RabbitHandler的作用是什么?
接收从消息队列中存放的消息
- @RabbitListener注解中的bindings属性的作用是什么?
- @QueueBinding注解中的value属性的作用是什么?
- @QueueBinding注解中的exchange属性的作用是什么?
- @QueueBinding注解中的key属性的作用是什么?
- @Exchange注解中的value属性的作用是什么?
- @Exchange注解中的type属性的作用是什么?
* @QueueBinding value:绑定队列的名称
* exchange:配置交换器
* key:路由键 :接收以el表达式内部代码格式结尾的消息
* @Queue value:配置队列名称
* autoDelete:是否是一个可删除的临时队列
*
* @Exchange value:为交换器起个名称
* type:指定具体的交换器类型
- Direct交换器-编写生产者
- AmqpTemplate中的converteAndSend(arg0,arg1,arg2)中的三个参数分别表示什么含义?
* 第一个参数表示 交换器的名称
* 第二个参数表示 路由键
* 第三个参数表示 消息,将要发送的消息
- Topic交换器-搭建环境
- 什么是Topic交换器?
Topic交换器(主题,规则匹配)
- Topic交换器-编写消费者
- 如何在消息消费者的注解中指定交换器与路由规则?
通过@RabbitListener注解
- Fanout交换器-搭建环境
- 什么是Fanout交换器?
Fanout交换器(广播),会将消息转发给每一个节点
- 什么是服务注册中心
- 什么是服务的注册中心?
服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来存储服务信息,譬如提供者 url 串、路由信息等。服务注册中心是SOA 架构中最基础的设施之一。
- 服务的注册中心的作用是什么?
服务的注册 服务的发现
- 常见的注册中心有哪些?
Dubbo 的注册中心 Zookeeper Sringcloud 的注册中心 Eureka
- 注册中心解决了什么问题
- 注册中心主要解决了什么问题?
服务管理 服务的依赖关系管理
- 什么是Eureka注册中心
- 什么是Eureka注册中心?
Eureka 是 Netflix 开发的服务发现组件,本身是一个基于 REST 的服务。Spring Cloud 将它集成在其子项目 spring-cloud-netflix 中,以实现 Spring Cloud 的服务注册于发现,同时 还提供了负载均衡、故障转移等能力。
- Eureka注册中心有几种角色?每种角色的代表什么?