我们讲解了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