Fegin是什么?
Feign 是 Netflix 公司开发的一个声明式的 REST 调用客户端;
Ribbon 负载均衡、Hystrix 服务熔断是我们 Spring Cloud 中进行微服务开发非常基础的组件,在使用的过程中我们也发现它们一般都是同时出现的,而且配置也都非常相似,每次开发都有很多相同的代码,因此 Spring Cloud 基于 Netflix Feign 整合了 Ribbon 和 Hystrix 两个组件,Spring Cloud Feign
对 Ribbon 负载均衡、Hystrix 服务熔断进行简化,在其基础上进行了进一步的封装,不仅在配置上大大简化了开发工作,同时还提供了一种声明式的 Web 服务客户端定义方式;
使用 Feign 实现消费者
POM坐标:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<artifactId>05_springcloud_service_feign</artifactId>
<dependencies>
<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>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--spring cloud熔断器起步依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.4.RELEASE</version>
</dependency>
<!--spring boot的feign依赖坐标-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.4.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!--SpringCloud所有依赖管理的坐标-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
spring boot入口类:
@SpringBootApplication
@EnableFeignClients //开启Spring Cloud Feign支持
public class SpringCloudFeignApplicationTest {
public static void main(String[] args) {
SpringApplication.run(SpringCloudFeignApplicationTest.class);
}
}
声明服务
/**
* @author
* @Description: 使用Feign的客户端绑定远程服务名称
* 远程服务名称可大写 可小写
* @date 2020/12/26 18:41
*/
//指定熔断回调逻辑,不可获取异常信息
@FeignClient(name = "01springcloudprovider",fallback = MyFallBack.class)
//指定熔断回调逻辑,服务熔断获取异常信息
//@FeignClient(name = "01springcloudprovider",fallbackFactory = MyFallBackFactory.class)//可获取异常信息
public interface SpringCloudFeignService {
/**
* 声明一个方法,这个方法就是远程服务提供者提供的那个办法
* @return
*/
@RequestMapping("/getProviderSpringCloud")
public String testFeign();
}
服务熔断:
服务熔断对应:@FeignClient(name = “01springcloudprovider”,fallback = MyFallBack.class)
@Component
public class MyFallBack implements SpringCloudFeignService {
@Override
public String testFeign() {
return "服务出现异常,自定义myfallback!!!";
}
}
服务熔断对应可获取异常信息: @FeignClient(name = “01springcloudprovider”,fallbackFactory = MyFallBackFactory.class)//可获取异常信息
@Component
public class MyFallBackFactory implements FallbackFactory<SpringCloudFeignService> {
@Override
public SpringCloudFeignService create(Throwable throwable) {
return new SpringCloudFeignService() {
@Override
public String testFeign() {
return throwable.getMessage();
}
};
}
}
application.properties属性配置:
#tomcat内置端口
server.port=8083
#配置服务名称和注册中心地址
spring.application.name=05springcloudfeign
eureka.client.service-url.defaultZone=http://erueka8761:8761/eureka,http://erueka8762:8762/eureka
#开启hystrix功能
feign.hystrix.enabled=true
controller调用:
@RestController
public class SpringCloudFeignController {
//feign 的声明式调用
@Autowired
private SpringCloudFeignService springCloudFeignService;
@RequestMapping("/testFeignController")
public String testFeignController(){
String feign = springCloudFeignService.testFeign();
return feign;
}
@RequestMapping("/hello")
public String hello(){
return "hello web!!!";
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/77252.html