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注解配置的方式
————————————————
版权声明:本文为CSDN博主「liuxinyu9795」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37330730/article/details/89875726

发布了259 篇原创文章 · 获赞 316 · 访问量 93万+

猜你喜欢

转载自blog.csdn.net/u014756827/article/details/103664332