feign整合了ribbon,具备负载均衡的能力。
一. 新建feign服务
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
在配置类上加上注解
@EnableEurekaClient注解将服务注册到eureka server
@EnableFeignClients注解开启OpenFeign功能
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients /* 开启fegin功能 */
public class FegindemoApplication {
public static void main(String[] args) {
SpringApplication.run(FegindemoApplication.class, args);
}
}
2. 创建feign请求接口
//feign 整合了ribbon,具备负载均衡的功能
//这是一个feign客户端,调用name服务名的服务,轮询访问可用的服务器
@FeignClient(name = "hello-service-1")
public interface HelloServiceFegin {
//不支持@GetMapping()注解,使用requestMapping中的value属性去匹配方法,
//与本方法名无关,但是参数列表必须相同
//结合起来这一段表示调用 hello-service-1服务的/index接口
@RequestMapping(value = "/index",method = RequestMethod.GET)
String fasfsaf();
}
贴一下hello-service-1服务的index方法
public class TestController {
@Value(value = "${server.port}")
private Integer port;
@GetMapping("/index")
public String index(){
return "client_1" + this.port;
}
}
主要是显示当前服务的启动端口,直观feign的轮询访问
为了方便测试,创建一个Controller,调用该接口
@RestController
public class TestController {
@Autowired
HelloServiceFegin helloServiceFegin;
@GetMapping("/test")
public String test(){
return helloServiceFegin.fasfsaf();
}
}
测试
启动各服务:
(1) eureka注册中心
(2) hello-service-1 服务,启动了两个服务实例,port:20000 port:20002
(3) 上文创建的feign实例,启动端口10002
重复请求 http://localhost:10002/test,返回如下
轮询访问20000 20002 端口。
Hystrix 简单使用
fegin是自带断路器的,默认关闭,在配置中打开
feign.hystric.enabled=true
之要在@FeignClient中加上属性
@FeignClient(valur="hello-servcie-1",fallback = HelloServiceFeginFallbackImpl.class)
//feign 整合了ribbon,具备负载均衡的功能
//这是一个feign客户端,调用name服务名的服务,轮询访问可用的服务器
@FeignClient(name = "HELLO-SERVICE-1",fallback = HelloServiceFeginFallbackImpl.class)
@Component(value = "helloServiceFegin")
public interface HelloServiceFegin {
//不支持@GetMapping()注解,使用requestMapping中的value属性去匹配方法
//与本方法名无关,但是参数列表必须相同
@RequestMapping(value = "/index",method = RequestMethod.GET)
String fasfsaf();
}
@Component
public class HelloServiceFeginFallbackImpl implements HelloServiceFegin {
@Override
public String fasfsaf() {
return "sorry,the target server is not available";
}
}
当停掉hello-service-1时,发起请求: