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 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包中加入相应的依赖,配置好环境


    org.springframework.cloud
    spring-cloud-starter-openfeign

(2)feign服务器类,采用注解来配置,要访问的数据服务在eureka注册中心上的名称

@FeignClient(value = "PRODUCT-DATA-SERVICE")
public interface ProductClientFeign {
 
    @GetMapping("/products")
    public List listProdcuts();
}

(3)注解多了个 @EnableFeignClients, 表示用于使用 Feign 方式。

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients

总结:
因为feign是对ribbon的封装,采用注解来配置,较为简便,所以我们之后建议都使用feign注解配置的方式

你可能感兴趣的:(SpringCloud)