SpringCloud之Feign(Finchley版)

Java面经 2019-03-05 16:00:00

作者:cuifuan 
公众号:Java知音 

Feign是一个声明式的Web服务客户端。

是什么?

例如我在一个服务的interace上注解@FeignClient(value = "eureka-client") 
就是声明服务名称 告诉其他服务等这个就是eureka-client 的服务客户端,它使编写Web服务客户端变得更容易

要使用Feign,请创建接口并注解, 有可插入的注解支持,包括Feign注释和JAX-RS注释。

JAX-RS注释: JAX-RS是JAVAEE6 引入的,JAX-RS即Java API for RESTful Web Services, 是Java的应用程序接口,如:

  • @Path标注资源类或方法的相对路径
  • @GET,@PUT,@POST,@DELETE 请求方式

Feign还支持可插拔编码器和解码器。

Spring Cloud Netflix 为 Feign提供了下面默认的配置Bean 
Decoder feignDecoder: ResponseEntityDecoder 
Encoder feignEncoder: SpringEncoder

Spring Cloud增加了对Spring MVC注释的支持,并使用了Spring Web中默认使用的相同HttpMessageConverters。

Spring Cloud集成了Ribbon和Eureka,在使用Feign时提供负载均衡的http客户端。

白话文:微服务架构端口很多,我们要统一端口就要用到Feign去各个服务拿接口;需要从一个服务调用另外一个服务的数据也可以直接使用Feign,也就是通过这种方式开发调用远程服务就像是调用本地服务一样方便。

准备工作

  • 环境
  1. IDEA 2018.3
  2. Gradle 4.10
  3. springCloudVersion Finchley.RELEASE
  4. 没有eureka-server的可以去github下载源码:
  5. https://github.com/cuifuan/springcloud-tools
  6. 创建的是子项目,父项目Github下载

创建eureka-client服务

gradle配置 build.gradle

SpringCloud之Feign(Finchley版)

 

创建启动类 ToolsEurekaClientApplication.java

SpringCloud之Feign(Finchley版)

 

资源文件 application.yml

eureka:
 client:
 service-url:
 defaultZone: http://127.0.0.1:8761/eureka/
server:
 port: 8762
spring:
 application:
 name: eureka-client

业务接口 UserService.java

package store.zabbix.toolseurekaclient.service;
import store.zabbix.common.entity.User;
import java.util.List;

public interface UserService {
 Integer createUser(User user);
 List<User> getUserAll(String username,Long id);
 Integer updateUser(User user);
 Integer deleteUser(List<Integer> ids);
}

业务实现层 UserServiceImpl.java

SpringCloud之Feign(Finchley版)

 

控制层 UserController.java

SpringCloud之Feign(Finchley版)

 

由上面的server.port 可知端口为8762。

可是如果我们有多个eureka-client,会造成后端接口访问端口太多。

所以在这里可以采用feign进行统一调度

新建tools-routing服务

build.gradle

dependencies {
 implementation "org.springframework.cloud:spring-cloud-starter-openfeign"
 implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
 implementation 'org.springframework.cloud:spring-cloud-starter-netflix-hystrix'
}

新建的是子项目,依赖管理统一在父项目,子项目只声明自己单独使用的依赖,父项目在github可以进行拉取,地址在上面

启动类 ToolsRoutingApplication.java

SpringCloud之Feign(Finchley版)

 

核心就是开启@EnableFeignClients注解

application.yml

SpringCloud之Feign(Finchley版)

 

创建UserServiceClients调用eureka-client接口

SpringCloud之Feign(Finchley版)

 

@FeignClient是核心, @FeignClient里value的值是eureka-client的application.yml声明的,(??上面下面是上面关系,作者这里写的不是很好)如下:

spring:
 application:
 name: eureka-client

启动ToolsRoutingApplication.java

发现启动报错

SpringCloud之Feign(Finchley版)

 

说明:
@GetMapping在这个版本可以使用,其传值要使用@RequestParam 
在一些版本无法使用@GetMapping,需使用@RequestMapping(value = "user",method = RequestMethod.GET)

UserServiceClients接口

SpringCloud之Feign(Finchley版)

 

说明:PUT和DELETE请求,使用json传输List时或许会报错,请在注解内加上参数produces = "application/json",如@DeleteMapping(value = "user",produces = "application/json")

创建 UserController.java 控制访问层

SpringCloud之Feign(Finchley版)

 

Postman 测试结果

查询

SpringCloud之Feign(Finchley版)

 

添加

SpringCloud之Feign(Finchley版)

 

修改

SpringCloud之Feign(Finchley版)

 

删除

SpringCloud之Feign(Finchley版)

 

有postman的可以使用下面的链接:

https://www.getpostman.com/collections/8f56e7246e290e8036f0

 

SpringCloud各版本出现的问题坑等很多,遇到问题尽量自行解决,收获才会有很多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值