SpringCloud 第二节 两种服务调用方式(ribbon和feign)
上一节我们讲解了eureka server作为服务注册中心,和其他client如何去订阅注册中心,因为每个小功能都作为了一个微服务组件,其中功能之间的通信和访问显得至关重要,于是我们今天来学一下微服务之间如何相互调用和通信。
springcloud 提供了两种方式,一种是 Ribbon,一种是 Feign。
1.Ribbon 是使用 restTemplate 进行调用,并进行客户端负载均衡。 什么是客户端负载均衡呢? 在前面 注册数据微服务 里,注册了8001和8002两个微服务, Ribbon 会从注册中心获知这个信息,然后由 Ribbon 这个客户端自己决定是调用哪个,这个就叫做客户端负载均衡。
(1)需要创建一个ribbon服务端类,调用restTemplate的getForObject来访问数据服务在eureka 注册中心的名称,
注意:PRODUCT-DATA-SERVICE/products是你想要通信的数据服务在eureka注册中心上的名称
@Component public class ProductClientRibbon { @Autowired RestTemplate restTemplate; public List<Product> listProdcuts() { return restTemplate.getForObject("http://PRODUCT-DATA-SERVICE/products",List.class); } }
(2)然后在Service服务层中定义ribbon服务端类属性并自动注入,再在Controller控制器类中调用Service层返回页面。
(3)在启动类中要定义注解@EnableDiscoveryClient, 表示用于发现eureka 注册中心的微服务,还多了个 RestTemplate,就表示用 restTemplate 这个工具来做负载均衡
代码:
@Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); }
2.Feign 是什么呢? Feign 是对 Ribbon的封装,调用起来更简单,用注解来进行配置
(1)先在pom包中加入相应的依赖,配置好环境
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
(2)feign服务器类,采用注解来配置,要访问的数据服务在eureka注册中心上的名称
@FeignClient(value = "PRODUCT-DATA-SERVICE") public interface ProductClientFeign { @GetMapping("/products") public List<Product> listProdcuts(); }
(3)注解多了个 @EnableFeignClients, 表示用于使用 Feign 方式。
@SpringBootApplication @EnableEurekaClient @EnableDiscoveryClient @EnableFeignClients
总结:
因为feign是对ribbon的封装,采用注解来配置,较为简便,所以我们之后建议都使用feign注解配置的方式
- SpringCloud微服务调用方式之Ribbon和Feign方式
- SpringCloud 查找调用REST服务使用RestTemplate(ribbon负载)或feign模式 教程源码 火推
- Springcloud微服务调用ribbon与feign
- 玩转SpringCloud(F版本) 三.断路器(Hystrix)RestTemplate+Ribbon和Feign两种方式
- SpringCloud之服务提供与调用(Ribbon,Feign)
- springcloud 服务调用的两种方式
- Spring Cloud中声明式服务调用Feign
- springcloud-ribbon、fein服务调用的对比使用以及重试机制的使用
- Spring Cloud中声明式服务调用Feign
- springcloud使用feign实现服务间条用,参数数据太大,无法调用成功解决方法
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十九):服务消费(Ribbon、Feign)
- spring cloud eureka服务调用出现feign.codec.EncodeException: Could not write request: no suitable HttpMessa
- SpringCloud之服务调用(Ribbon)
- 使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务
- spring cloud之服务调用及使用ribbon实现负载均衡(三)
- 使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务
- spring cloud 系列第4篇 —— feign 声明式服务调用 (F版本)
- 干货分享微服务spring-cloud(5.声明式服务调用feign)
- Spring Cloud ZooKeeper集成Feign的坑2,服务调用了一次后第二次调用就变成了500,错误:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.n
- SpringCloud微服务知识整理六:声明式服务调用 Spring Cloud Feign