您的位置:首页 > 编程语言 > Java开发

SpringCloud Finchley 实战入门(基于springBoot 2.0.3)【七 Fegin 声明式服务调用】

2018-07-26 15:20 1336 查看

Fegin 介绍

spring cloud fegin ,他是基于Netflix Fegin实现得,整合了spring cloud Ribbon和spring cloud Hystrix,除了整合这两者得功能外,他还提供了了一种声明式得Web服务客户端定义方式。

快速入门

创建一个spring boot项目命名为”eureka-bussniss-service-user-client-fegin”,选择server和fegin的依赖;

application.yml相关配置:

spring:
application:
name: service-user-client-fegin
server:
port: 9001
eureka:
client:
serviceUrl:
defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka/
feign:
hystrix:
enabled: true

项目主类EurekaBussnissServiceUserClientFeginApplication,添加@EnableEurekaClient和@EnableFeignClients注解

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class EurekaBussnissServiceUserClientFeginApplication {

public static void main(String[] args) {
SpringApplication.run(EurekaBussnissServiceUserClientFeginApplication.class, args);
}
}

我们以eureka-bussniss-service-user的服务例。在fegin项目中定义一个接口”UserFeignClient”

/**
* 标明feign调用的微服务名称
*/
//通过@ FeignClient(“服务名”),来指定调用哪个服务。
// 比如在代码中调用了service-hi服务的“/hi”接口,还可以使用url参数指定一个URL
// fallback  出现错误回调类
@FeignClient(name = "service-user",fallback = UserFallback.class)
public interface UserFeignClient {

/**
* 对应service-user微服务中的URL
* @return
*/
@GetMapping("/listUsers")
String listUsers();

}

接着,创建一个Controller来实现对Fegin客户端的调用,使用@Autowired自动注入上面的“UserFeignClient ”实例。并且通过方法实现对service-user的服务发起调用。

@RestController
public class UserFeignApi {
/**
* 将刚才定义的userFeignClient注入,并当成普通的接口调用即可
*/
@Autowired
private UserFeignClient userFeignClient;

@GetMapping("/listUsersByFeign")
public String ListUsers(){
String users = this.userFeignClient.listUsers();
return users;
}
}

方式测试fegin的负载均衡以及服务容错保护的功能,我们创建了一个UserFallback实现UserFeignClient。实现接口请求错误的反馈

@Component
public class UserFallback implements UserFeignClient {
@Override
public String listUsers() {
return "服务调用失败";
}
}

包路径截图

到这里就已经基本完成了,依次启动service-user(8802,8803两个端口)、fegin。

访问fegin项目的地址http://localhost:9001/listUsersByFeign


重复请求,会发现接口数据是依次返回8802和8803的数据的。

现在把其中一个service-user服务停掉(8803),一开始当请求负载到8803这个服务实例时,因为当前的服务已经停掉了,所以接口响应显示了我们实现了UserFallback 类的返回。

再过几秒钟后,我们继续请i求会发现,接口已经全部负载到了8802的服务实例了。

所以可以看到fegin已经实现了Ribbon和Hystrix的功能了。

github 项目源码

下一篇我们将实现spring cloud config分布式配置中心的组件。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐