发表于: 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的简单原理和使用方法。
评论