spring-cloud-starter-openfeign现实中的运行逻辑spring-cloud-starter-openfeign 是 Spring Cloud 生态中声明式的 HTTP 客户端核心作用是让你像调用本地方法一样调用远程 HTTP 接口不用手写复杂的 RestTemplate/OkHttp 代码大幅简化微服务间的通信。· 声明式你只需要定义一个接口加几个注解Spring 会自动帮你实现接口的 HTTP 调用逻辑不用写一行请求代码。· 底层依赖基于 Netflix Feign 封装默认用 Spring MVC 注解GetMapping/PostMapping 等也兼容 Feign 原生注解。· 核心优势集成负载均衡默认 Ribbon、熔断器Hystrix/Sentinel、请求 / 响应拦截、参数解析等开箱即用。安装依赖!--SpringCloudOpenFeign核心依赖--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId!--版本建议和SpringCloud版本匹配比如2023.0.0--version2023.0.0/version/dependency!--若需要负载均衡微服务必加--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId/dependency定义 Feign 客户端接口假设你要调用远程服务 SC-USER的 /user/{id} 接口importorg.springframework.cloud.openfeign.FeignClient;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.PathVariable;// name远程服务名注册中心中的服务名url本地测试可直接指定地址非微服务场景FeignClient(name sc-user)publicinterfaceUserFeignClient{// 完全复用 Spring MVC 注解和本地 Controller 写法一致GetMapping(/user/{id})UserDTOgetUserById(PathVariable(id)Longid);// 复杂请求示例POST 请求体PostMapping(/user)UserDTOcreateUser(RequestBodyUserDTOuserDTO);}// 配套的实体类和远程服务返回结构一致classUserDTO{privateLongid;privateStringname;privateIntegerage;}配置路由网关spring:application:name:sc-gateway cloud:nacos:discovery:server-addr:192.168.0.54:****metadata:region:default# 路由网关配置 gateway:# 设置与服务注册发现组件结合这样可以采用服务名的路由策略 discovery:locator:enabled:true# 配置路由规则 routes:# 采用自定义路由ID有固定用法不同的 id 有不同的功能详见https://cloud.spring.io/spring-cloud-gateway/2.0.x/single/spring-cloud-gateway.html#gateway-route-filters-id:SC-USER# 采用LoadBalanceClient方式请求以 lb://开头后面的是注册在Nacos上的服务名 uri:lb://sc-user #Predicate翻译过来是“谓词”的意思必须主要作用是匹配用户的请求有很多种用法 predicates:#Method方法谓词这里是匹配GET和POST等请求-Path/user/** filters: - StripPrefix1 profiles: active: local main: allow-bean-definition-overriding: true banner-mode: off #开启sentinel适配feign feign: sentinel: enabled: true ribbon: ReadTimeout: 60000 ConnectTimeout: 60000 management: endpoints: web: exposure: #include: [beans,metrics,info,health,loggers] include: * security: enabled: false添加负载均衡依赖支持!--OpenFeign核心依赖--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactIdversion2023.0.0/version/dependency!--负载均衡核心依赖必须加否则无法根据服务名寻址--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId/dependency!--注册中心依赖以Nacos为例根据你的注册中心替换--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactIdversion2023.0.1.0/version/dependency开启服务发现和 Feignimportorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;importorg.springframework.cloud.openfeign.EnableFeignClients;// 开启服务发现从注册中心获取实例EnableDiscoveryClient// 开启 Feign 客户端扫描EnableFeignClientsSpringBootApplicationpublicclassFeignConsumerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(FeignConsumerApplication.class,args);}}调用 Feign 接口负载均衡自动生效importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.RestController;importjavax.annotation.Resource;RestControllerpublicclassUserController{ResourceprivateUserFeignClientuserFeignClient;GetMapping(/user/{id})publicStringgetUser(PathVariableLongid){// 多次调用会自动分发到不同实例默认轮询returnuserFeignClient.getUserById(id);}}完毕· OpenFeign 实现负载均衡的核心是「服务名调用 LoadBalancer 依赖 服务发现」无需手写负载逻辑· 关键步骤引 LoadBalancer 依赖 → 开启服务发现 → FeignClient 只写服务名 → 自动轮询分发请求· 可通过配置自定义负载策略随机 / 权重等满足不同业务需求。