Skip to content

08.1 — 服务注册发现与调用

核心: 服务注册中心选型对比、声明式远程调用 OpenFeign 面试高频度: ⭐⭐⭐⭐

← 返回 **返回 Spring Cloud 索引**


1. 服务注册发现

架构对比

组件说明CAP健康检查适用场景
Nacos阿里开源,注册中心+配置中心CP+AP 可切换心跳+健康检查国内首选
EurekaNetflix,已维护模式AP心跳旧项目维护
ConsulHashiCorpCP健康检查+RPC多数据中心
ZookeeperApacheCP会话超时Kafka 等集成

Nacos 注册中心

yaml
spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        namespace: dev
        group: DEFAULT_GROUP
java
@SpringBootApplication
@EnableDiscoveryClient  // 实际可省略,Nacos 自动配置
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Eureka 注册中心

yaml
# 服务端
server:
  port: 8761
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false

# 客户端
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

2. 远程调用 — OpenFeign

java
// 1. 启用 Feign
@SpringBootApplication
@EnableFeignClients
public class Application {}

// 2. 声明式 HTTP 客户端
@FeignClient(name = "user-service", url = "${user-service.url}", 
             fallbackFactory = UserClientFallbackFactory.class)
public interface UserClient {
    
    @GetMapping("/users/{id}")
    Result<User> getUser(@PathVariable Long id);
    
    @PostMapping("/users")
    Result<User> createUser(@RequestBody UserCreateRequest request);
    
    @GetMapping("/users/batch")
    Result<List<User>> getUsers(@RequestParam("ids") List<Long> ids);
}

// 3. 熔断降级处理
@Component
@Slf4j
public class UserClientFallbackFactory implements FallbackFactory<UserClient> {
    @Override
    public UserClient create(Throwable cause) {
        return new UserClient() {
            @Override
            public Result<User> getUser(Long id) {
                log.error("getUser fallback: id={}", id, cause);
                return Result.error(503, "用户服务不可用");
            }
        };
    }
}

核心面试题

  1. Nacos 和 Eureka 在 CAP 理论上的区别?
  2. OpenFeign 如何集成负载均衡和服务熔断?

Knowledge4J — Java 知识库