SpringCloud之OpenFeign的学习、快速上手

本文介绍了OpenFeign在SpringCloud中的应用,包括如何使用它简化HTTP开发、通过Nacos实现服务发现、依赖引入、配置步骤、负载均衡以及实际业务场景中的调用示例。
摘要由CSDN通过智能技术生成

1、什么是OpenFeign

OpenFeign简化了Http的开发。在RestTemplate的基础上做了封装,在微服务中的服务调用发送网络请求起到了重要的作用,简化了开发,可以让我们跟写接口一样调其他服务。

并且OpenFeign内置了Ribbon实现负载均衡。

官方文档:Spring Cloud OpenFeign 中文文档 (springdoc.cn)

2、OpenFeign的使用

2.1准备

我们准备了两个微服务,一个商品微服务一个订单微服务。

商品微服务为根据id查询商品详细信息,订单微服务则传入商品id、用户id对商品服务进行调用生成订单。

使用OpenFegin是需要通过注册中心来访问服务的,消费者想通过服务名称调用提供者,就需要注册中心的服务发现功能。

这里我们使用Nacos,Nacos可以参考SpringCloud之Nacos的学习、快速上手-CSDN博客

2.2使用步骤

2.2.1引入依赖

        <!--nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>

        <!--feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>

在order-service和product-service都引入上面两个依赖

在maven管理中我们可以看到OpenFeign已经集成了负载均衡ribbon

启动Nacos服务

2.2.2application.yml

订单微服务

server:
  port: 8091    #端口
spring:
  application:
    name: order-service    #服务名称
  cloud:
    nacos:     #配置nacos服务地址
      discovery:
        server-addr: localhost:8848

商品微服务

2.2.3开启OpenFeign

我们需要在消费者的启动类上加上注解@EnableFeignClients

因为我们是在订单服务中调用商品服务,所以我们在订单服务的启动类上加上该注解

@SpringBootApplication
@EnableFeignClients
public class OrderServer {
    public static void main(String[] args) {
        SpringApplication.run(OrderServer.class,args);
    }
    
}

2.2.4业务逻辑

在商品微服务中有个根据商品id查询商品详细信息接口

在订单微服务中则为新增订单        用户下单--->根据商品id获取商品信息---->返回下单信息

商品微服务

订单微服务

2.2.5使用OpenFeign发起请求

定义接口ProductFeignApi

使用注解@FeignClient()中的name属性则为需要调用的服务名称

@FeignClient(name = "product-service")
public interface ProductFeignApi {

    @RequestMapping("/product/{pid}")
    Product findByPid(@PathVariable("pid") Long pid);
}

在OrderServiceImpl中调用

@Service
@Slf4j
public class OrderServiceImpl implements IOrderService {
    @Autowired
    private OrderDao orderDao;
    @Autowired
    private ProductFeignApi productFeignApi;
    @Override
    public Order createOrder(Long productId,Long userId) {
        log.info("接收到{}号商品的下单请求,接下来调⽤商品微服务查询此商品信息",
                productId);
        //远程调⽤商品微服务,查询商品信息
        Product product = productFeignApi.findByPid(productId);
        log.info("查询到{}号商品的信息,内容是:{}", productId,JSON.toJSONString(product));
        //创建订单并保存
        Order order = new Order();
        order.setUid(userId);
        order.setUsername("张三");
        order.setPid(productId);
        order.setPname(product.getPname());
        order.setPprice(product.getPprice());
        order.setNumber(1);
        orderDao.save(order);
        log.info("创建订单成功,订单信息为{}", JSON.toJSONString(order));
        return order;
    }
}

2.2.6启动项目测试

为了测试负载均衡我们使用不同端口启动商品服务

右键服务点击复制配置        

输入-Dserver.port=8082以8082端口再开一个商品微服务

清空三个项目的日志

我们访问订单服务的新增接口可以看到商品数据已经正常拿到了

多访问几次,可以看到两个商品服务的控制台都有查询日志的输出,则说明负载均衡也有被使用

  • 21
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两年半的个人练习生^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值