spring cloud openFeign

本文介绍了OpenFeign的基本概念及其在Java Http客户端中的作用,通过一个具体的示例展示了如何创建`order-service`和`user-service`项目,演示了如何在`user-service`中使用OpenFeign进行服务调用并实现负载均衡。同时,文章还提到了OpenFeign的熔断降级机制,展示了如何配置回退方法以处理服务请求失败的情况。
摘要由CSDN通过智能技术生成

一、openFeign简介

openFeign是一种伪声明式RPC,它旨在使编写Java Http客户端变得更容易,它的性能主要体现在它的通信层面上。

参考资料一参考资料二

二、通过demo来学习

  首先,我们需要一个“order项目”,我们通过部署多个订单系统来分散订单压力;其次我们需要一个“user项目”,在“user项目”上我们需要实现客户端的负载均衡。

1、order-service订单项目

新建一个spring项目,项目名称为“order-service”。

(1)、项目依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

(2)、application.properties配置文件

spring.application.name=order-service
server.port=8080

(3)、项目代码

package com.example;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class OrderController {

    @Value("${server.port}")
    private int port;

    @GetMapping("getOrder")
    public String getOrder(){
        return "获取订单信息,服务端口:"+port;
    }

}

订单项目构建好后,我们可以启动多个订单服务。IDEA启动多个服务

2、user-service用户系统

新建一个spring项目,项目名称为“user-service”。

(1)、项目依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

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

(2)、application.properties配置文件

spring.application.name=user-service
server.port=8070

#配置指定服务提供者的列表
order-service.ribbon.listOfServers=\
  localhost:8080,localhost:8081

(3)、项目代码

新建FeignClient接口,添加@FeignClient注解,配置应用服务名“order-service”

package com.example;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient("order-service")
public interface OrderServiceFeignClient {

    @GetMapping("getOrder")
    String getOrder();

}
package com.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class OpenFeignController {

    @Autowired
    private OrderServiceFeignClient orderServiceFeignClient;

    @GetMapping("feignClientMethod")
    public String feignClientMethod(){
        return orderServiceFeignClient.getOrder();
    }

}

另外我们需要在spring入口类中添加@EnableFeignClients注解来开启openFeign。如果我们的feignClient接口和入口类不在同级目录下,我们还需要配置basePackages,例如:

@EnableFeignClients(basePackages = "com.example.clients")
package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients
public class UserServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }

}

三、总结

    另外open-feign还提供了熔断降级机制,我们可以通过“fallback”配置来提供请求的默认返回参数,处理返回异常。详见以下代码。

@FeignClient(value = "order-service",fallback = OrderServiceFeignClientImpl.class)
public interface OrderServiceFeignClient {

    @GetMapping("getOrder")
    String getOrder();
}

 

import org.springframework.stereotype.Component;

@Component
public class OrderServiceFeignClientImpl implements OrderServiceFeignClient {

    @Override
    public String getOrder() {
//接口请求失败,默认返回此处的提示信息
        return "查询订单失败,请稍后重试!";
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值