发表于: 2020-09-18 23:37:28

1 1508


今天完成的事

feign demo。

这个是前面用RestTemplate调用eureka-client提供的api服务,可以看到所需要的参数须在请求的URL中进行拼接

如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率低下。

@Service
public class RibbonService {
@Autowired
   RestTemplate restTemplate;
   public String hi(String name){
return restTemplate.getForObject("http://eureka-client/hi?name="+name,String.class);
   }
}

feign的出现解决了这个问题。

Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。

而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。

下面是feign的例子:

pom文件引入依赖。

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-feign</artifactId>
  <version>1.4.7.RELEASE</version>
</dependency>

EurekaClientFeign 接口

@FeignClient(value = "eureka-client",configuration = FeignConfig.class)
public interface EurekaClientFeign {
@GetMapping(value = "/hi")
String sayHiFromClientEureka(@RequestParam(value = "name") String name);
}

配置类

@Configuration
public class FeignConfig {
   @Bean
   public Retryer feigunRetryer(){
     return new Retryer.Default(100,SECONDS.toMillis(1),5);
   }
}

在Service层的HiService类注入EurekaClientFeign的bean,通过EurekaClentFeign去调用sayHiFromClientEureka()方法:

@Service
public class HiService {
   @Autowired
   EurekaClientFeign eurekaClientFeign;
   public String sayHi(String name){
     return eurekaClientFeign.sayHiFromClientEureka(name);
   }

}

Controller

@RestController
public class HiController {
   @Autowired
   HiService hiService;
   @GetMapping("/hi")

   public String home(@RequestParam(defaultValue = "SpringCloud",

   required = false) String name){

      return hiService.sayHi(name);
   }
}

启动类添加@EnableFeignClients注解开启Feign Client功能

启动service,client,feignClient

此时的架构图

在浏览多次访问http://localhost:8765/hi,浏览器会轮流显示以下内容:

hiSpringCloud, i am from port:8762

hiSpringCloud, i am from port:8763

由此可见Feign Client远程调用了eureka-client服务(存在端口为8762和8763的两个实例)的“hi”APi接口,Feign Client 有负载均衡的能力。

明天的计划:

熔断器 Hystrix demo和了解原理。

遇到的问题:

收获:

Feign的简单原理和使用方法。


返回列表 返回列表
评论

    分享到