一、Feign简介

  Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。

  它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。

  Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。

简而言之:

  • Feign 采用的是基于接口的注解
  • Feign 整合了ribbon

二、准备工作

  使用之前做好的项目文件, 启动eureka-server,端口为8761; 启动service-hi 两次,端口分别为8762 、8763.

三、创建一个feign的服务

  新建一个spring-boot工程,取名为serice-feign,在它的pom文件引入Feign的起步依赖spring-cloud-starter-feign、Eureka的起步依赖spring-cloud-starter-eureka、Web的起步依赖spring-boot-starter-web,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.forezp</groupId>
<artifactId>service-feign</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>service-feign</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> <repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories> </project>

  在工程的配置文件application.yml文件,指定程序名为service-feign,端口号为9900,服务注册地址为http://localhost:8761/eureka/ ,代码如下:

eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 9900
spring:
application:
name: service-feign

  在程序的启动类ServiceFeignApplication ,加上@EnableFeignClients注解开启Feign的功能:

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ServiceFeignApplication { public static void main(String[] args) {
SpringApplication.run(ServiceFeignApplication.class, args);
}
}

  定义一个feign接口,通过@ FeignClient(“服务名”),来制定使用哪个Eureka客户端服务

  接口方法上加上@RequestMapping(value = "/hi",method = RequestMethod.GET)表示调用路径为/hi的方法get方式 传递参数为  String  name

代码如下:

/**
* Created by fangzhipeng on 2017/4/6.
*/
@FeignClient(value = "service-hi")
@Service
public interface SchedualServiceHi { 
  @RequestMapping(value = "/hi",method = RequestMethod.GET)
  String sayHiFromClientOne(@RequestParam(value = "name") String name);
}

  在Web层的controller层,对外暴露一个”/hi”的API接口,通过上面定义的Feign客户端SchedualServiceHi 来消费服务。代码如下:

@RestController
public class HiController { @Autowired
SchedualServiceHi schedualServiceHi;
@RequestMapping(value = "/hi",method = RequestMethod.GET)
public String sayHi(@RequestParam String name){
return schedualServiceHi.sayHiFromClientOne(name);
}
}

启动程序,使用postMan工具多次多次访问http://localhost:9900/hi?name=kksks    交替显示调用8762    8763

hi kksks,i am from port:8762

hi kksksi am from port:8763

最新文章

  1. WPF 微信 MVVM 【续】发送部分QQ表情
  2. BZOJ 1176: [Balkan2007]Mokia
  3. java类 对象 和构造方法
  4. leetcode96 Unique Binary Search Trees
  5. hdu 1423 最长公共递增子序列
  6. eclipse和android studio导入工程的错误
  7. boost::asio译文
  8. 使用Hamcrest增强JUnit的测试能力
  9. 2299 Ultra-QuickSort(归并)
  10. Ibatis配置存储过程xml文件案例
  11. React 实践项目 (二)
  12. 转载:.Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法
  13. springboot security
  14. idea编辑器激活码
  15. CSAPP:信息的表和处理1
  16. CodeForces - 589A(二分+贪心)
  17. 在cmd下可以import cv2,而Pycharm报错:找不到cv2
  18. js中return ,return true,return false;区别
  19. Spark项目之电商用户行为分析大数据平台之(十)IDEA项目搭建及工具类介绍
  20. Kafka消费者APi

热门文章

  1. 《AlwaysRun团队》第三次作业:团队项目的原型设计
  2. 洛谷 P2347 砝码称重 题解
  3. The 2019 ICPC China Nanchang National Invitational and International Silk-Road Programming Contest
  4. Count on a tree 树上主席树
  5. vim命令整理
  6. CNN模型合集 | 1 LeNet
  7. 10月清北学堂培训 Day 4
  8. Synchronized 原理
  9. LUA upvalues
  10. java权限管理与用户角色权限设计