Spring Cloud Alibaba:常用的服务消费方式(RestTemplate、OpenFeign)

Spring Cloud Alibaba:常用的服务消费方式(RestTemplate、OpenFeign)

简介

通过上一篇博客,我们已经初次尝试的使用Nacos作为服务注册中心实现服务的注册与发现。在测试服务消费过程中,我们使用的是RestTemplate组件,但是这种方式相对而言会比较复杂,每次调用服务接口都需要指定服务id,调用接口路径,处理返回内容等,对于开发人员来说非常的不友好。所以本文主要记录常用的远程服务消费方式,主要有两种,分别是RestTemplate和OpenFeign,下面就来看看他们是怎么使用的把。

一、使用RestTemplate

使用RestTemplet能够方便的使用REST资源,RestTemplate提供了多种调用远程服务的便捷式方法。因为Spring Cloud Alibaba默认引用了Ribbon,所以使用RestTemplate不仅可以简单实现远程服务调用,同时如果给Bean ResttTemplate添加注解@LoadBalanced注解,它还具备负载均衡的功能。

主要使用方式如下所示:

@Autowired
@LoadBalanced
private RestTemplate restTemplate;

@GetMapping("sale")
public String sale() {
    
    
    log.info("订单服务, 开始下单售卖商品");
    String stockServiceName = "stock-service";
    String stackUrl = String.format("http://stock-service/stock/allocation", stockServiceName);
    String forObject = restTemplate.getForObject(stackUrl, String.class);
    System.out.println(String.format("订单服务,商品完成售卖:%s", forObject));
    return "订单服务,商品完成售卖";
}

测试使用情况:
在这里插入图片描述

二、使用OpenFeign

相较restTrmplet,Feign使用@FeignClient注解来指定接口,接口中定义的函数可以通过Spring MVC的注解来绑定服务提供方的REST接口。需要消费服务时,只需要直接调用对应方法即可。

2.1 在pom.xml中增加openfeign的依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.2 定义Feign客户端

这里我主要定义库存服务的客户端,这里只写了基础用法,通过feign可以实现更多高级的功能,例如异常处理等。库存服务客户端代码如下:

/**
 * @ClassName: RestTemplateDemoController
 * @Description: RestTemplate方式实现远程调用
 * @Author oyc
 * @Date 2021年02月04日 9:03
 * @Version 1.0
 */
@RestController
@RequestMapping("rest")
@Slf4j
public class RestTemplateDemoController {
    
    

    @Autowired
    @LoadBalanced
    private RestTemplate restTemplate;

    @GetMapping("sale")
    public String sale() {
    
    
        log.info("订单服务, 开始下单售卖商品");
        String stockServiceName = "stock-service";
        String stackUrl = String.format("http://stock-service/stock/allocation", stockServiceName);
        String forObject = restTemplate.getForObject(stackUrl, String.class);
        System.out.println(String.format("订单服务,商品完成售卖:%s", forObject));
        return "订单服务,商品完成售卖";
    }
}

2.3 使用Feign客户端

Feign客户端定义好了之后,可以直接将依赖注入使用,就像调用本地方法一样。使用案例代码如下:

/**
 * @ClassName: OpenFeignDemoController
 * @Description: OpenFeign 方式实现远程调用
 * @Author oyc
 * @Date 2021年02月04日 9:03
 * @Version 1.0
 */
@Slf4j
@RestController
@RequestMapping("feign")
public class OpenFeignDemoController {
    
    

    @Autowired
    private StockOpenFeignClient stockClient;

    @GetMapping("sale")
    public String sale() {
    
    
        log.info("订单服务, 开始下单售卖商品");
        //使用openfeign方式实现对库存服务的远程调用,就行调用本地方法一样
        String forObject = stockClient.sale();
        System.out.println(String.format("订单服务,商品完成售卖:%s", forObject));
        return "订单服务,商品完成售卖";
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u014553029/article/details/113624452