Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。
它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成
了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。
简而言之:
Feign 采用的是基于接口的注解
Feign 整合了ribbon,具有负载均衡的能力
整合了Hystrix,具有熔断的能力
二、准备工作
继续用上一节的工程, 启动eureka-server,端口为8761; 启动service-hi 两次,端口分别为8762 、8773.
了解springcloud架构可以加求求:三五三六二四七二五九
三、创建一个feign的服务
新建一个spring-boot工程,取名为serice-feign,在它的pom文件引入Feign的起步依赖spring-cloud-starter-feign、
Eureka的起步依赖spring-cloud-starter-netflix-eureka-client、Web的起步依赖spring-boot-starter-web,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
< 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 >com.forezp</ groupId >
< artifactId >sc-f-chapter3</ artifactId >
< version >0.0.1-SNAPSHOT</ version >
</ parent >
< dependencies >
< dependency >
< groupId >org.springframework.cloud</ groupId >
< artifactId >spring-cloud-starter-netflix-eureka-client</ artifactId >
</ dependency >
< dependency >
< groupId >org.springframework.boot</ groupId >
< artifactId >spring-boot-starter-web</ artifactId >
</ dependency >
< dependency >
< groupId >org.springframework.cloud</ groupId >
< artifactId >spring-cloud-starter-openfeign</ artifactId >
</ dependency >
</ dependencies >
</ project >
|
在工程的配置文件application.yml文件,指定程序名为service-feign,端口号为8765,服务注册地址为http://localhost:8761/eureka/ ,代码如下:
1
2
3
4
5
6
7
8
9
|
eureka: client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server: port: 8765
spring: application:
name : service-feign
|
在程序的启动类ServiceFeignApplication ,加上@EnableFeignClients注解开启Feign的功能:
1
2
3
4
5
6
7
8
9
|
@SpringBootApplication @EnableEurekaClient @EnableDiscoveryClient @EnableFeignClients public class ServiceFeignApplication {
public static void main(String[] args) {
SpringApplication.run( ServiceFeignApplication.class, args );
}
} |
定义一个feign接口,通过@ FeignClient(“服务名”),来指定调用哪个服务。比如在代码中调用了service-hi服务的“/hi”接口,代码如下:
1
2
3
4
5
|
@FeignClient(value = "service-hi" )
public interface SchedualServiceHi {
@RequestMapping(value = "/hi" ,method = RequestMethod.GET)
String sayHiFromClientOne(@RequestParam(value = "name" ) String name );
} |
在Web层的controller层,对外暴露一个"/hi"的API接口,通过上面定义的Feign客户端SchedualServiceHi 来消费服务。代码如下:
1
2
3
4
5
6
7
8
9
10
|
@RestController public class HiController {
//编译器报错,无视。 因为这个Bean是在程序启动的时候注入的,编译器感知不到,所以报错。
@Autowired
SchedualServiceHi schedualServiceHi;
@GetMapping(value = "/hi" )
public String sayHi(@RequestParam String name ) {
return schedualServiceHi.sayHiFromClientOne( name );
}
} |
启动程序,多次访问http://localhost:8765/hi?name=forezp,浏览器交替显示:
hi forezp,i am from port:8762
hi forezp,i am from port:8763
相关推荐
赠送jar包:feign-form-spring-3.8.0.jar; 赠送原API文档:feign-form-spring-3.8.0-javadoc.jar; 赠送源代码:feign-form-spring-3.8.0-sources.jar; 赠送Maven依赖信息文件:feign-form-spring-3.8.0.pom; ...
Spring Cloud 服务注册中心-...1-SpringCloudDemo-ServiceConsumers-Feign(服务消费者-feign) 1-SpringCloudDemo-ServiceConsumers-Ribbon(服务消费者-ribbon) 1-SpringCloudDemo-ServiceConsumers(服务消费者-基础)
赠送jar包:feign-form-3.8.0.jar; 赠送原API文档:feign-form-3.8.0-javadoc.jar; 赠送源代码:feign-form-3.8.0-sources.jar; 赠送Maven依赖信息文件:feign-form-3.8.0.pom; 包含翻译后的API文档:feign-form...
在本项目"spring-cloud-user-feign.zip"中,我们探讨的是如何在Spring Cloud框架下实现服务间的调用,特别是利用Feign客户端进行微服务通信。这个压缩包包含了四个关键组件,分别是: 1. spring-cloud-gateways:这...
在本项目中,Eureka被用来创建一个注册中心(eureka-service),服务提供者(eureka-demo)会注册到这个中心,同时存在一个服务消费者(feign-client)使用Feign来调用服务提供者。Feign客户端通过声明式的方式定义...
在这个名为"SpringCloud-创建服务消费者-Feign方式示例代码.zip"的压缩包中,我们预计将看到一个简单的Spring Cloud应用,该应用展示了如何利用Feign作为服务消费者来调用其他服务。 首先,让我们了解Feign的基本...
赠送jar包:feign-core-11.8.jar; 赠送原API文档:feign-core-11.8-javadoc.jar; 赠送源代码:feign-core-11.8-sources.jar; 赠送Maven依赖信息文件:feign-core-11.8.pom; 包含翻译后的API文档:feign-core-...
赠送jar包:feign-core-10.12.jar; 赠送原API文档:feign-core-10.12-javadoc.jar; 赠送源代码:feign-core-10.12-sources.jar; 赠送Maven依赖信息文件:feign-core-10.12.pom; 包含翻译后的API文档:feign-core...
feign-gson-9.5.1feign-gson-9.5.1 feign-gson-9.5.1feign-gson-9.5.1feign-gson-9.5.1
而`spring-cloud-alibaba-demo-user`则为服务消费者,通过Feign接口调用`spring-cloud-alibaba-nacos`中的服务。 在实际开发中,我们还需要注意以下几点: 1. 服务消费者通过Nacos获取服务提供者的元数据,包括服务...
然后,"SpringCloud-2.0-order-hystrix-feign-8012"展示了如何使用Feign和Hystrix进行服务间调用。Feign是一个声明式Web服务客户端,使得编写Web服务客户端就像编写Java接口一样简单。在Order服务中,我们可以定义一...
在这个"eureka 客户端-服务消费者"的示例中,我们将深入探讨如何使用 Spring Boot 和 Spring Cloud 的最新版本来实现基于 Feign 的服务消费者。 1. **Eureka 服务注册与发现** Eureka 是 Netflix 开源的一个基于 ...
本示例以"spring-cloud-alibaba-nacos-feign-sentinel.zip"为核心,旨在展示如何将Nacos用于服务注册与发现,Feign实现服务间的无侵入调用,以及Sentinel作为流控防护屏障,构建一个高效且稳定的微服务体系。...
在本项目"SpringCloud-2.0-order-Feign-8005.zip"中,主要探讨了如何在Spring Cloud 2.0环境下利用Feign客户端实现服务间的调用,并达到与`@LoadBalanced`注解类似的效果,即负载均衡。Spring Cloud是基于Spring ...
Feign 的英文表意为“假装,伪装,变形”, 是一个http请求调用的轻量级...Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,这种请求相对而言比较直观。
项目介绍本项目仿照Feign,旨在istio体系中,快速完成服务间调用,并保持链路追踪。去除了Feign中所有熔断,负载均衡策略,全部由istio控制。demodemo说明servicea提供client,serviceb依赖servicea的client并开启...
本示例代码着重讲解如何利用Ribbon创建服务消费者,结合Eureka实现服务发现。Eureka是Netflix开源的服务注册与发现工具,它使得微服务之间能够互相找到并进行通信。 首先,我们需要理解Spring Cloud Eureka的工作...
赠送jar包:feign-core-11.8.jar; 赠送原API文档:feign-core-11.8-javadoc.jar; 赠送源代码:feign-core-11.8-sources.jar; 赠送Maven依赖信息文件:feign-core-11.8.pom; 包含翻译后的API文档:feign-core-...
2. 在服务消费者中注入并调用接口: ```java @Service public class ConsumerService { @Autowired private ServiceProviderClient serviceProviderClient; public String callProvider(String name) { return ...
Feign的设计灵感来源于Netflix的Feign库,它的主要目的是简化微服务之间的通信,使得开发者可以像定义接口一样调用远程服务,从而降低了服务消费者与提供者的耦合度。 在传统的Web Service(WebService)中,我们...