openFeign&Feign
实际上openFeign是Feign的封装,它支持了Spring MVC的相关注解。使用openFeign由原始的对象编程逐渐转向接口编程,代码更加清晰。
首先创建一个父类工程;
Eureka服务创建(eureka-server服务)
新增配置YML/properties配置文件
至此Eureka配置完毕,只需要在启动类上增加@EnableEurekaServer注解,启动服务,访问:http://localhost:8716服务,看到Eureka控制面板说明配置成功,接下来配置服务提供模块。
service-feign-services服务提供模块
工程pom.xml配置文件如下:
配置文件如下:
注意:server. compression. enabled= false 是设置是否压缩传输。这里说明下,当大文件使用feign调用时,针对内部调用又Gzip压缩机制,具体可以去搜索看看 ,大概理解就是像握手协议中互认标志一样。spring. application. name=feign-services,这个是调用哪个服务的身份认证,明确且唯一。
在service-feign-services 该模块下增加微服务标准,这是Application Service要提供的服务的标准,也是Application Client要调用远程服务的标准,通俗点就是一个普通的接口。
GET请求
测试GET请求传递一个普通的参数。 /get?id=xxx
在为Feign定义服务标准接口的时候,处理请求参数的方法参数,必须使用@RequestParam注解描述,并且无论方法参数名和请求参数名是否一致,都需要定义@RequestParam注解的value/name属性
POST请求
测试使用POST请求传递一个普通参数,Feign技术中,默认的发起POST请求的时候,请求的参数,都是在请求体中使用JSON数据传递的,不是name=value对传递的,所以必须使用@RequestBody注解来解析请求体中的数据,如果使用POST方式发起请求,传递多个普通参数,是使用请求头传递的参数。可以使用@RequestParam注解来处理请求参数,POST请求的请求体类型还是application/json。feign会通过请求头传递多个请求参数: /xxx?a=xxx&b=xxx&c=xxx
错误示例
使用GET请求传递特殊参数。自定义类型的参数。在Feign发起的默认的请求中,GET请求方式不能传递自定义类型数据。只能通过POST请求传递,如果这种请求,会报如下错误:
feign.FeignException$MethodNotAllowed: status 405 reading IServices#add(FeignTestPOJO)
最后使用一个控制器去实现(implements)以上接口,并在该控制器加上@restController注解。启动即可
service-feign-clients服务消费模块
pom.xml引入service-feign-services包,编写接口文件去继承(extends)Application Service所提供的服务,加上@FeignClient注解,name属性指定需要调用哪个Service所提供的服务,也就是服务互认;
像平时开发代码一样。调用本地的一个service接口。通过service接口远程访问Application Service在该模块启动类中增加两个注解:@EnableFeignClients和@EnableDiscoveryClient,
相关配置:
如果不增加以下配置默认1s要求服务方返回结果,但是在实际开发项目中不可能1秒就返回,需要增加时长。配置如下:
请求方式可以配置请求池的方式连接,高并发请求量一般都是使用请求池的方式进行请求。
测试
编写测试类调用Services服务并启动Clients。
我本地Clients服务是8080端口,所以访问地址:http://localhost:8080/getTestFeign,数据正常请求。
至此。Feign&Eureka服务间调用编写完毕。能用图说明的干嘛写文字。