使用OpenFeign代替RestTemplate来请求接口

2023-05-16

在使用RestTemplate来调用接口服务的时候,需要写一个调用地址的参数,这样做不太好管理接口地址,OpenFeign就提供了一个比较好的管理方式,类似于写一个Mapper的接口,把调用的地址也写一个接口来管理。

Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端,Feign本身不支持Spring MVC的注解,它有一套自己的注解,OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解,Feign内置了Ribbon,用来做客户端负载均衡。只有是客户端的项目才会发起接口调用,所以OpenFeign是用于客户端的。

OpenFeign = Feign(Robbin) + 注解

RestTemplate方式的控制器方法:

使用OpenFeign的步骤:

  1. 引入jar包
  2. 启动类加注解
  3. 编写Api接口
  4. 控制器调用
  5. 配置Ribbon随机轮询

1.引入jar包

找包

导包

把这块包的声明放入项目pom.xml文件中的<dependencies>节点中,保存

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

 2.启动类加注解 @EnableFeignClients

package com.example;

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

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class Consumer8203Application {

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

}

3.编写Api接口 ProductApi.java

package com.example.api;

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

// 指明要调的接口在哪个服务上的服务名(找Eureka)
@FeignClient(value = "PRODUCT-SERVICE")
public interface ProductApi {
    
    // 指明要调用的接口的路径
    @RequestMapping("/index")
    public String index();
}

4.控制器调用

package com.example.controller;

import com.example.api.ProductApi;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class IndexController {
    
    @Resource
    RestTemplate restTemplate;
    
    @Autowired
    ProductApi productApi;
    
    @GetMapping("/a")
    public String index(){
        
        // 直接使用注册中心,服务提供项目的项目名称去请求就可以了
        String url = "http://PRODUCT-SERVICE/index";
        
        String result = restTemplate.getForObject(url, String.class);
        
        return result;
    }
    
    @GetMapping("/feign")
    public String feign(){
        String result = productApi.index();
        return result;
    }
}

到这里就可以启动消费者的项目了,访问 http://localhost:8203/feign 的时候,可以看到返回的接口不断的交替。这就是Ribbon默认的负载方式。

 接下来改一下Ribbon的负载方式,改成随机的方式:

5.配置Ribbon随机轮询

修改application.yml

spring:
  application:
    name: consume # 消费者的实例名称
    
server:
  port: 8203 # 消费者实例的端口号

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8201/eureka/,http://localhost:8221/eureka/  # 注册中心的服务地址,用于将消费者注册进去

# 需要改变ribbon轮询调用方式的服务名
PRODUCT-SERVICE:
  ribbon:
    # 改为随机的方式
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

 保存,重启项目再次访问 http://localhost:8203/feign ,不断的刷新就能够发现输入的接口是随机的了。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用OpenFeign代替RestTemplate来请求接口 的相关文章

随机推荐

  • Hyper-V配置PCI设备直通(DDA)之GPU直通

    记录性随笔 xff0c 较随意 xff0c 有相同需求和问题欢迎留言交流 首先贴上所参考的大佬文章 xff1a https www licc tech article id 61 35 以下完全按照文章步骤进行 xff0c 并对遇到的问题提
  • java数据类型转换

    一些初学JAVA的朋友可能会遇到JAVA的数据类型之间转换的苦恼 xff0c 例如 xff0c 整数和float double型之间的转换 xff0c 整数和String类型之间的转换 xff0c 以及处理 显示时间方面的问题等 下面笔者就
  • Ubuntu安装时卡在安装界面怎么办

    当我们在虚拟机安装Ubuntu的时候 xff0c 可能很多的小伙伴会遇到界面卡住 xff0c 其实时那个界面显示太小了 xff0c 这时你应该关闭安装的界面 xff0c 你关闭之后会自动进入ubuntu的界面 xff0c 右击界面找到显示设
  • [编程题]带括号的四则运算

    一 问题描述 输入字符串中的有效字符包括 0 9 43 xff0c 算术表达式的有效性由调用者保证 输入描述 xff1a 输入一个算术表达式 输出描述 xff1a 得到计算结果 输入示例 xff1a 3 43 2 1 43 2 4 8 6
  • cJSON的简单应用(json对象、数组)

    cJSON 结构 xff1a typedef struct cJSON structcJSON next prev next prevallow you to walk array object chains Alternatively u
  • 关于阿里云上使用smtp的25号端口被禁用的问题

    在使用python进行SMTP服务进行发送邮件的时候 xff0c 出现在发送的的过程中阻塞但是并不报错的现象 xff0c 经过调试后发现 xff0c 在连接SMTP服务器的时候发生阻塞 这个原因的产生是因为阿里云服务器关闭了25号端口 xf
  • centos7中图数据库neo4j安装

    neo4j是目前最流行的开源的图数据库之一 xff0c 喜欢研究新技术的朋友们可以尝试着搭建一下图数据库 安装环境Centos7 xff08 阿里云vps xff09 版本 xff1a neo4j 社区版 1 首先安装jdk 2 安装neo
  • linux查看防火墙状态

    一 iptables防火墙 1 基本操作 查看防火墙状态 service iptables status 停止防火墙 service iptables stop 启动防火墙 service iptables start 重启防火墙 serv
  • centos7中mysql安装

    环境 xff1a centos7 xff08 阿里云vps xff09 mysqld 5 7 27 先检查系统是否装有mysql xff0c 如果返回空值 xff0c 说明没有安装MySQL xff1b root 64 localhost
  • 树莓派3B首次安装

    下载系统 xff1a 树莓派官网https www raspberrypi org downloads raspbian 从该系统下载相关的镜像文件 xff0c 我这里用的是 2017 09 07 raspbian stretch lite
  • LightPC: Hardware and Software Co-Design for Energy-Efficient Full System Persistence(论文阅读翻译)

    xff08 注 xff1a 课程作业要求 xff0c 机翻自己看的 xff09 Abstract 我们提出了LightPC xff0c 一种轻量级的持久性中心平台 xff0c 以使系统对电源故障具有鲁棒性 LightPC由硬件和软件子系统组
  • LINUX 常用命令

    LINUX 常用命令 1 cd命令 这是一个非常基本 xff0c 也是大家经常需要使用的命令 xff0c 它用于切换当前目录 xff0c 它的参数是要切换到的目录的路径 xff0c 可以是绝对路径 xff0c 也可以是相对路径 如 xff1
  • Linux 下安装 WordPress

    Linux 下安装 WordPress 1 下载 WordPress wget i https cn wordpress org wordpress 5 0 3 zh CN zip 2 解压 wordpress 5 0 3 zh CN zi
  • 注册表操作,reg脚本简单编写

    注册表操作 xff0c reg脚本简单编写 添加项 Windows Registry Editor Version 5 00 HKEY CURRENT CONFIG System CurrentControlSet SERVICES TSD
  • EUI-64格式生成

    EUI 64 IEEE EUI 64地址表示有一个用于网络接口寻址的新标准 在IPV6中 xff0c 无状态自动配置机制使用EUI 64格式来自动配置IPV6地址 无状态自动配置是指在网络中没有DHCP服务器的情况下 xff0c 允许节点自
  • Git使用

    Git使用 生成RSA密钥对 ssh keygen t rsa C email t 指定生成的加密方式 C 添加注释 xff0c 一般来说是邮箱 注 xff1a 如果指定了文件名字为github rsa xff0c 需要配置config 内
  • maven 常用镜像仓库

    maven 常用镜像仓库 lt mirror gt lt id gt alimaven lt id gt lt mirrorOf gt central lt mirrorOf gt lt name gt aliyun maven lt na
  • 面向对象的语言主要有哪些

    面向对象程序设计 Object Oriented Programming xff0c OOP 的实质是选用一种面向对象程序设计语言 OOPL xff0c 采用对象 类及其相关概念所进行的程序设计 主要有Smalltalk Eiffel C
  • Python如何自制包、如何安装自己的包并导入

    首先科普一下包和模块的概念 xff1a 在Python中 xff0c 包是一个包含多个模块的目录 xff0c 而模块则是一个单独的文件 一个包可以包含多个模块 xff0c 也可以包含其他的子包 当一个目录下面有一个 init py文件时 x
  • 使用OpenFeign代替RestTemplate来请求接口

    在使用RestTemplate来调用接口服务的时候 xff0c 需要写一个调用地址的参数 xff0c 这样做不太好管理接口地址 xff0c OpenFeign就提供了一个比较好的管理方式 xff0c 类似于写一个Mapper的接口 xff0