Spring Cloud中, 服务又该如何调用 ?
各个服务以HTTP接口形式暴露 , 各个服务底层以HTTP Client的方式进行互相访问。
SpringCloud开发中,Feign是最方便,最为优雅的服务调用实现方式。
Feign 是一个声明式,模板化的HTTP客户端,可以做到用HTTP请求访问远程服务就像调用本地方法一样。
作用:可以解决不同服务器接口之间的相互调用,即跨域请求!feign结合eureka注册中心,把不同的服务项目注册到eureka中,通过feign客户端进行调用,可以解决负载均衡问题
1、在pom文件中添加feign依赖
2、在springboot启动主类上面添加注解@EnableFeignClients,该注解表示当程序启动时,会进行包扫描,默认扫描所有带@FeignClient注解的类进行处理
这里指定了basepackages,指定了接口类所在的包,缩小了扫描范围,不指定的话默认为扫描所有包(不确定,疑问点)
3、配置appliation.properties,注册到Eureka Server
eureka.client.serviceUrl.defaultZone=http://localhost:50017/eureka/
4、声明接口
@FeignClient标签的常用属性如下:
- name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现
- url: url一般用于调试,可以手动指定@FeignClient调用的地址
- decode404:当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException
- configuration: Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
- fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口
- fallbackFactory: 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码
- path: 定义当前FeignClient的统一前缀
5、自动注入后使用