spring cloud 之 openFeign

news2025/2/24 23:56:21

Feign和openFeign

Feign

Fegin使java Http客户端更加方便简洁,

Feign集成了Ribbon、RestTemplate实现了负载均衡的执行Http调用,只不过对原有的方式(Ribbon+RestTemplate)进行了封装,开发者不必手动使用RestTemplate调服务,而是定义一个接口,在这个接口中标注一个注解即可完成服务调用,这样更加符合面向接口编程的宗旨,简化了开发

openFeign 

底层使用的是java的URL connection作为默认http客户端,不支持连接池,建议使用HttpClient,支持连接池

openFeign是springcloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,并交给spring容器管理,实现类中做负载均衡并调用其他服务,调用的时候非常简单便捷,只需要注入Bean即可,这里的动态代理指的是jdk动态代理,因为是基于接口的http代理调用

环境搭建

这里注册中心使用nacos作为注册中心

建立被调用服务并注册nacos

配置文件

spring:
  application:
    name: cloud-test-service
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

controller

package com.slbuildenv.cloud.controller;

import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@RestController
@RequestMapping("/find")
@RefreshScope
public class TestFeign {


    @GetMapping("/date")
    public String getDate(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }
}

建立调用服务并注册nacos

添加依赖

openFeign有条件注解判断是否引入Httpclient,如果引入此依赖,则使用Httpclient,默认无需配置,默认值就是开启

  

<dependencies>
        <!--nacos客户端依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
         <!--feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--  feign性能优化 apache httpclient包 支持连接池 默认使用jdk urlConnection 不支持连接池-->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 </dependencies>

 配置文件

spring:
  application:
    name: cloud-feign-client
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 9300
feign:
  httpclient:
    connection-timeout: 5000

client接口

package com.slbuildenv.cloud.client;

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

@FeignClient("cloud-test-service")
public interface TestFeign {

    @GetMapping("/find/date")
    String findDate();
}

contoller调用

package com.slbuildenv.cloud.controller;

import com.slbuildenv.cloud.client.TestFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/feign")
public class TestFeignRemote {

    @Autowired
    private TestFeign testFeign;

    @GetMapping("/date")
    public String getRemoteDate(){
       return  testFeign.findDate();
    }
}

启动类加开启feign的客户端注解

package com.slbuildenv.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;

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

项目结构

查看Nacos注册情况及测试

查看服务注册情况

 发起请求测试feign调用 http://localhost:9300/feign/date

 

 feign还有整合Hystrix和sentinel做熔断升级,在Hystrix和sentinel中介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/743481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】- Vim 编辑器、开关机、和用户权限管理常用命令

Vim 编辑器、开关机、和用户权限管理常用命令 1.1&#x1f330;vi 和 vim 的基本介绍1.2&#x1f36e;vi 和 vim 常用的三种模式1.3&#x1f320;vim的基本使用2.1&#x1f365;开机、重启2.2&#x1f37c;用户登录注销3.1&#x1f600;用户管理&#xff08;crud&#xff09;3.…

【C++算法模板】快排、归并、二分

目录 快速排序 归并排序 二分算法 整数二分 浮点数二分模板 总结&#xff1a; 快速排序 //快速排序 void quick_sort(int q[], int l, int r) {if (l > r) return;//向下取整可能使得x取到q[l]int i l - 1, j r 1, x q[l r >> 1];while (i < j){do i; …

M芯片Mac实现安卓模拟器多开

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

Linux kernel内存初始化介绍

early_fixmap_init&#xff1a; dtb进行映射&#xff0c;通过设备树文件和membloc模块让内核了解更为广阔的内存世界。Uboot将dtb拷贝到内存中&#xff0c;且通过传递相关参数将dtb的物理地址告知内核。但是内核必须将dtb的相关物理地址映射到虚拟地址上&#xff0c;通过虚拟地…

基于springboot的城乡医疗卫生服务系统

摘 要 网络的广泛应用给生活带来了十分的便利。所以把城乡医疗卫生服务与现在网络相结合&#xff0c;利用java语言建设城乡医疗卫生服务系统&#xff0c;实现城乡医疗卫生服务系统的信息化。则对于进一步提高医院的发展&#xff0c;丰富城乡医疗卫生服务经验能起到不少的促进作…

ModaHub魔搭社区:向量数据库Zilliz Cloud集群、Collection 及 Entity教程

目录 集群 Collection 字段 Schema 索引 Entity Zilliz Cloud 集群由全托管 Milvus 实例及相关计算资源构成。您可以在 Zilliz Cloud 集群中创建 Collection,然后在 Collection 中插入 Entity。Zilliz Cloud 集群中的 Collection 类似于关系型数据库中的表。Collection …

使用React的函数式组件实现一个具有过渡变化、刻度切换、点击高亮的柱状图DIY组件

本想使用业界大佬们开源的各种图表库&#xff08;如&#xff1a;ECharts、G2可视化引擎、BizCharts ...&#xff09;&#xff0c;但是有的需求不仅要求有过渡变化&#xff0c;还要点击某个图高亮同时发送HTTP请求数据等功能&#xff0c;着实不知道怎么把canvas或svg绘制的图表弄…

ElasticSearch入门教程

文章目录 一、Elasticsearch 概述1.1、ElasticSearch是什么&#xff1f;1.2、ElasticSearch的安装 二、ElasticSearch的使用2.1、索引操作2.2、文档操作2.3、映射操作2.4、高级查询操作 一、Elasticsearch 概述 1.1、ElasticSearch是什么&#xff1f; 官网解释如图所示&#…

Rdkit|操作分子对象

github&#xff1a;地址 文章目录 RDKit|操作分子对象引入所需库获取分子中的原子获取原子的坐标信息访问单个原子的信息访问所有原子分子中的键操作获取键的信息 获取分子中所有的环 RDKit|操作分子对象 引入所需库 from rdkit import Chem from rdkit.Chem import Draw获取…

Mysql基本语法+Navicat使用

进入数据库&#xff1a;mysql -uroot -p 修改数据库密码&#xff1a;ALTER USER rootlocalhost IDENTIFIED BY 这里输入密码; &#xff08;如&#xff1a;ALTER USER rootlocalhost IDENTIFIED BY 111111;&#xff09; 创建数据库&#xff1a;create database 数据库名; 查…

刷题记录01

题目一. 这道题要先解释一下什么是非递增,非递增就是a[i] >a[i1],递增则是相反. 非递减就是a[i]>a[i1],递减就是相反 大方向思路是: 遍历数组判断相邻元素的顺序关系统计排序子序列数量 具体思路: 本题依次比较整个数组a[i1]>a[i] &#xff0c;则进入非递增序列判…

在vue中点击弹框给弹框中的表格绑值

场景描述&#xff1a;如下图所示&#xff0c;我们需要点击 ‘账单生成’ 按钮&#xff0c;然后里边要展示一个下图这样的表格。 最主要的是如何展示表格中的内容&#xff0c;一起看看吧&#xff01; <template><!-- 水费 欠费--><el-dialog title"水费欠费…

静态图片转3D动态GIF/视频

Leiapix是一项令人印象深刻的技术&#xff0c;它可以让静态的图片动起来&#xff0c;为观众提供沉浸式和交互式的图像体验。这项创新的技术使用了Leia Inc.的自适应光栅屏幕技术&#xff0c;通过利用人眼的视差和立体视觉效应&#xff0c;将图像中的元素以动态的方式呈现出来&a…

《第一次线下面试总结》

《第一次线下面试总结》 面试时间&#xff1a;2023/7/11 上午10点 面试总时长20分钟。 实习薪资&#xff1a;2.3k…后期看表现&#xff0c;可根据实际情况那啥 。估计是看锤子… 一、HR面 自我介绍你哪里的、目前住哪里等基本信息。你偏向前端还是后端&#xff1f;说说你的项目…

电路分析基础学习(上)第7章

李瀚荪版电分第二版 目录 二阶电路的定义 电路中的等幅振荡与阻尼振荡 RLC电路的零输入响应 ----------------------------------------------------------------------------------------------------------------------------- 二阶电路的定义 二阶电路是指由电容、电感…

[QT编程系列-3]:C++图形用户界面编程,QT框架快速入门培训 - 2- QT程序的运行框架:HelloWorld、常见控件、对象树原理

目录 2. QT程序的运行框架 2.1 Hello World程序框架 2.2 QT Designer初识 2.3 用QT Designer设计用户登录界 2. QT程序的运行框架 2.1 Hello World程序框架 上述示例代码中&#xff0c;首先根据应用程序的需求使用 QCoreApplication 或 QApplication 定义 app 对象。如果你…

[综述] Generative AI meets 3D: A Survey on Text-to-3D in AIGC Era

论文&#xff5c; 改文章是23年5月27日挂在arxiv上&#xff0c;本文重点关注4.1节Text Guided 3D Avatar Generation、4.4节Text Guided 3D Shape Transformation和第5章Discussion Text Guided 3D Avatar Generation DreamAvatar DreamAvatar: Text-and-Shape Guided 3D Hu…

k8s中网络通讯简单介绍

1 前言 Kubernetes的网络模型假定了所有的pod都在一个可以直接连通的扁平的网络空间中&#xff0c;这在GCE&#xff08;Google Compute Engine&#xff09;里面是现成的网络模型&#xff0c;Kubernetes假设这定这个网络已经存在。但是在私有云里搭建Kubernetes集群&#xff0c;…

CHI read trans flow

Read transactions with DMT and without snoops 对于不产生snoop的read trans&#xff0c;建议使用DMT功能&#xff0c;如下图所示&#xff1a; 注意点&#xff1a; a. SNF并不需要给HNF回响应&#xff0c;因为RN发送的compack可以释放HNF处记录的请求; Read transaction wi…

《Redis 核心技术与实战》课程学习笔记(七)

切片集群&#xff1a;数据增多了&#xff0c;是该加内存还是加实例&#xff1f; 切片集群&#xff0c;也叫分片集群&#xff0c;就是指启动多个 Redis 实例组成一个集群&#xff0c;然后按照一定的规则&#xff0c;把收到的数据划分成多份&#xff0c;每一份用一个实例来保存。…