面试题答案
一键面试服务注册与发现
- 措施:使用Eureka、Consul等服务注册中心。服务实例启动时向注册中心注册自身信息,其他服务通过注册中心获取可用服务实例列表。
- 配置实现:以Eureka为例,在服务端,引入Eureka Server依赖,在配置文件(如application.yml)中配置Eureka Server相关属性,如端口、注册地址等。在客户端,引入Eureka Client依赖,配置文件中指定Eureka Server地址,开启服务注册与发现功能。
- 代码实现:在Spring Boot应用的主类上添加
@EnableEurekaServer
(服务端)或@EnableEurekaClient
(客户端)注解。
负载均衡
- 措施:采用Ribbon或Feign等负载均衡组件。Ribbon是客户端负载均衡器,Feign内置了Ribbon。它们会从服务注册中心获取服务实例列表,并根据负载均衡策略选择一个实例进行调用。
- 配置实现:在配置文件中可配置负载均衡策略,如
ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
(使用随机策略)。对于Feign,只需引入依赖并进行简单配置即可使用负载均衡功能。 - 代码实现:在使用RestTemplate调用服务时,通过
@LoadBalanced
注解开启负载均衡,例如@Bean @LoadBalanced RestTemplate restTemplate()
。在Feign客户端接口定义中,直接使用注解定义服务调用方法,如@FeignClient(name = "service - name") public interface MyFeignClient { }
。
熔断机制
- 措施:引入Hystrix组件。当某个服务调用失败次数达到一定阈值,Hystrix会熔断该服务调用,避免级联故障。
- 配置实现:引入Hystrix依赖,在配置文件中设置熔断相关参数,如
hystrix.command.default.circuitBreaker.requestVolumeThreshold=20
(20次请求内失败次数达到一定比例就熔断)。 - 代码实现:在需要熔断的服务调用方法上添加
@HystrixCommand
注解,并指定熔断后的降级方法,如@HystrixCommand(fallbackMethod = "fallbackMethod") public String callService() { } public String fallbackMethod() { }
。
降级策略
- 措施:在服务不可用或出现异常时,返回兜底数据或执行简单逻辑,保证系统基本功能可用。
- 配置实现:通过Hystrix配置文件设置降级相关参数,如
hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests=10
(设置信号量隔离的最大并发请求数)。 - 代码实现:与熔断机制代码实现类似,在
@HystrixCommand
注解中指定降级方法,在降级方法中编写兜底逻辑,如返回静态数据或执行简单计算。