spring cloud&Alibaba面试题
1. 微服务个人理解
1、将微服务划分为外部服务和内部服务
外部服务:以终端划分的外部服务,如api-admin、api-pc、api-applets、api-app、api-h5,提供对外(用户)的API 接口数据 。
外部服务提供Feign服务通信调用内部服务获取数据。
内部服务:如订单服务、用户服务、商品服务、内容服务等内部服务,提供增删改查(搜索)等基本数据库操作
2. 什么是微服务?什么是服务治理(SOA governance)?
一:什么是微服务?
微服务是一种分布式系统架构风格,它的核心理念是将传统的单一应用开发为一组微型服务,每个服务运行在独立的进程中,服务之间采用轻量级通信机制进行相互调用。
3. 什么是Spring Cloud&&Alibaba?
Spring Cloud是Spring开源组织下的一个子项目,提供了一系列用于实现分布式微服务系统的工具集,帮助开发者快速构建微服务应用。
Spring Cloud Alibaba是Spring Cloud的子项目;包含微服务开发必备组件;基于和符合Spring Cloud标准的阿里的微服务解决方案。
4. 注册中心-Nacos(client端)和配置中心(server端)
参考:https://www.jianshu.com/p/39ade28c150d
4.1 什么是Nacos?
英文全称Dynamic Naming and Configuration Service,Na为naming/nameServer即注册中心,co为configuration即注册中心,service是指该注册/配置中心都是以服务为核心。
4.2 Nacos注册中心原理
服务提供者、服务消费者、服务发现组件这三者之间的关系大致如下
1、微服务在启动时,将自己的网络地址等信息注册到服务发现组件(nacos server)中,服务发现组件会存储这些信息。
2、各个微服务与服务发现组件使用一定机制通信(例如在一定的时间内发送心跳包)。服务发现组件若发现与某微服务实例通信正常则保持注册状态(up在线状态)、若长时间无法与某微服务实例通信,就会自动注销(即:删除)该实例。
3、服务消费者可从服务发现组件查询服务提供者的网络地址,并使用该地址调用服务提供者的接口。
4、当微服务网络地址发生变更(例如实例增减或者IP端口发生变化等)时,会重新注册到服务发现组件。
4.3 Nacos注册中心使用【Nacos-Client客户端】
(1)pom文件加依赖:alibaba-nacos-discovery
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
(2)启动类加注解
//Nacos服务端【早期版本需要加注解,现在0.0.9版本后已不是必须的】
@EnableDiscoveryClient
(3)在对应的微服务的yml配置文件【服务名称和nacos server 地址】
spring:
cloud:
nacos:
discovery:
#指定nacos server的地址,不需要写http
server-addr: localhost:8848
4.4 Nacos配置中心使用【Nacos-Server服务端】
(1)在服务上配置 nacos-server 配置中心
1。加依赖–alibaba-nacos-config
<!--nacos-config nacos管理配置的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2。无注解
3。加配置,新增bootstrap.yml文件配置,配置属性如下
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 #这里的server-addr用作配置管理
file-extension: yaml
application:
name: user-server
profiles: # profiles区分多环境配置
active: dev #切换配置文件,如dev、test、pro等环境
(2)配置中心包含:配置管理、服务管理(微服务管理)、命名空间、集群管理
4.5 通过配置更改动态刷新参数–@RefreshScope注解
普通application参数在配置中心直接配置皆可,如果需要可以动态刷新的配置,需要在相应类上加上@RefreshScope注解,示例如下,当在nacos配置中心更改配置后,方法getId的值也会刷新。
@RefreshScope
public class IdEntity {
@Value("${id}")
private int id