您的位置:首页 > 编程语言 > Java开发

SpringCloud 第二节 两种服务调用方式(ribbon和feign)

2019-05-06 11:32 721 查看

上一节我们讲解了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注解配置的方式

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐