SpringCloud Feign的使用简介

网友投稿 237 2023-01-22

SpringCloud Feign的使用简介

简介

feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似controller调用service。Spring Cloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端。

在springcloud中不仅可以使用Ribbo进行负载均衡,也可以使用Feign。Feign是在Ribbon的基础上进行了一次改进,采用接口的方式实现负载均衡。

使用

导入依赖

org.springframework.cloud

spring-cloud-starter-openfeign

编写对应的接口

@FeignClient(value = "PROVIDER-NAME")声明这是一个FeignClient,value指明需要的服务id

@FeignClient(value = "PROVIDER-NAME")

public interface DeptClientService {

// 请求的路径需与服务提供者的路径一致

@RequestMapping(value = "/dev/add")

boolean add(Dept dept);

@RequestMapping(value = "/dev/{id}")

Dept queryByID(@PathVariable("id") Long id );

@PostMapping(value = "/dev/list")

List queryAll();

}

修改Controller

我们不再使用RestTemplate来获取所需的对象,而是通过之前定义的接口来获取

@RestController

public class ConsumerController {

@Autowired

private DeptClientService service;

@RequestMapping("/consumer/get/{ihttp://d}")

public Dept getByID(@PathVariable("id") Long id){

return this.service.queryByID(id);

}

@RequestMapping("/consumer/add")

public boolean add(String dname){

Dept dept = new Dept();

dept.setDname(dname);

return this.service.add(dept);

}

@RequestMapping("/consumer/list")

public List list(){

return this.service.queryAll();

}

}

修改启动类

@EnableFeignClients 开启Feign负载均衡

@SpringBootApplication(scanBasePackages = "com")

@EnableEurekaClient

@EnableFeignClients(basePackages = "com.service")

public class FeignApplication {

public static void main(String[] args) {

SpringApplication.run(FeignApplication.class,args);

}

}

对比:

Ribbon

public class ConsumerController {

@Autowired

private RestTemplate template;

private static final String url="http://PROVIDER-NAME";

@RequestMapping("/consumer/get/{id}")

public Dept getByID(@PathVariable long id){

//请求的路径,返回的对象

Dept getEntity = template.getForObject(url + "/dev/"http:// + id, Dept.class);

return getEntity;

}

@RequestMapping("/consumer/add")

public boolean add(String dname){

Dept dept = new Dept();

dept.setDname(dname);

System.out.println(dept);

//请求的路径,传递的参数,返回的对象

return template.postForObject(url+ "/dev/add",dept,Boolean.class);

}

@RequestMapping("/consumer/list")

public List list(){

//请求的路径,返回的对象

return template.postForObject(url+"/dev/list",void.class,List.class);

}

}

Feign

@RestController

public class ConsumerController {

@Autowired

private DeptClientService service;

@RequestMapping("/consumer/get/{id}")

public Dept getByID(@PathVariable("id") Long id){

return this.service.queryByID(id);

}

@RequestMapping("/consumer/add")

public boolean add(String dname){

Dept dept = new Dept();

dept.setDname(dname);

return this.service.add(dept);

}

@RequestMapping("/consumer/list")

public List list(){

return this.service.queryAll();

}

}

总结

Feign的使用与Ribbon不同的地方在于

Feign通过接口来实现,更符合我们的面向接口编程的习惯

在Ribbon的Controller中我们需要将url拼接,而Feign帮我们进行了拼接

以上就是SpringCloud Feign的使用简介的详细内容,更多关于SpringCloud Feign的资料请关注我们其它相关文章!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:开放api接口协议(API接口协议)
下一篇:豆瓣电影api用不了(豆瓣API)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~