(企业 / 公司项目)微服务OpenFeign怎么实现服务间调用?(含面试题)

news2025/2/5 0:02:11

Feign: 远程调用组件使用步骤,理解上面的图

 后台系统中, 微服务和微服务之间的调用可以通过Feign组件来完成.

 Feign组件集成了Ribbon负载均衡策略(默认开启的, 使用轮询机制),Hystrix熔断器 (默认关闭的, 需要通过配置文件进行设置开启)

 被调用的微服务需要提供一个接口, 加上@FeignClient("url")注解

 调用方需要在启动类上加上@EnableFeignClients, 开启Feign组件功能

项目中使用

1.导入依赖 这里导入一个也行 负载均衡我使用的是openfeign自带的

        <!--远程调用openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--openfeign默认使用的是loadBalance的负载均衡器  -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>

 使用的前提是需要再你远程调用的模块配置文件中指定自己的模块名字,这样的话就idea就会更快的找到你的模块,在application.properties文件中设置

 创建两个模块这里就不多说明程序员基本操作

在batch模块中创建一个远程调用business模块的一个桥接口

* 这是一个使用 Spring Cloud Feign 的 Java 代码示例,
* 定义了一个名为 BusinessFeign 的接口,该接口
* 有一个名为 genDaily 的方法,该方法接收一个 Date 类型的参数,
* 并将其转换为 ISO 格式的时间字符串。

@FeignClient(name = "business", url = "http://127.0.0.1:8002/business") 重点注解

businessFeign

package com.jiawa.train.batch.feign;

import com.jiawa.train.common.resp.CommonResp;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

import java.util.Date;

/**
 * 这是一个使用 Spring Cloud Feign 的 Java 代码示例,
 * 定义了一个名为 BusinessFeign 的接口,该接口
 * 有一个名为 genDaily 的方法,该方法接收一个 Date 类型的参数,
 * 并将其转换为 ISO 格式的时间字符串。
 */
// @FeignClient("business")
@FeignClient(name = "business", url = "http://127.0.0.1:8002/business")
public interface BusinessFeign {

    /**
     * 这是一个远程服务,它的名称是 "business",
     * 它的 URL 是 "http://127.0.0.1:8002/business"。
     *
     * @return String
     */
    @GetMapping("/hello")
    String hello();

    /**
     * 这是一个 GET 请求,其请求路径为 "/admin/daily-train/gen-daily/{date}",
     * 其中 {date} 是路径参数,表示一个 Date 类型的参数。
     *
     * @param date 表示一个 Date 类型的参数,
     *            并且需要按照 "yyyy-MM-dd" 的格式进行格式化。
     * @return CommonResp<Object>
     */
    @GetMapping("/admin/daily-train/gen-daily/{date}")
    CommonResp<Object> genDaily(@PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd") Date date);
}

 有了这一座桥之后我们就只要利用这个桥指定(模块 和 访问的地址)

之后就可以在启动类打开这个远程调用的开关了,这里指定的是前面创建的接口 businessFeign的路径这样启动模块后就开始连接两个模块

@EnableFeignClients("com.jiawa.train.batch.feign")

在batch模块中可以创建类导入前面的接口,这样就可以调用business模块的方法

你可以在上面的接口中调用业务模块的方法。以上就完成了整个远程连接的流程,看起来实现很简单但是需要我们能够理解他里面的流程和业务怎么去实现

面试题:

1. OpenFeign是什么?

回答: OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequesMapping等等。OpenFeign的@Feignclient可以解析SpringMVc的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。
 

2. 怎么实现OpenFeign远程调用

 后台系统中, 微服务和微服务之间的调用可以通过Feign组件来完成.

 Feign组件集成了Ribbon负载均衡策略(默认开启的, 使用轮询机制),Hystrix熔断器 (默认关闭的, 需要通过配置文件进行设置开启)

 被调用的微服务需要提供一个接口, 加上@FeignClient("url")注解

 调用方需要在启动类上加上@EnableFeignClients, 开启Feign组件功能

3.如何在Spring Boot中使用Feign?

在Spring Boot中使用Feign,首先需要在pom.xml文件中添加spring-cloud-starter-openfeign依赖。然后,在启动类上添加@EnableFeignClients注解来启用Feign客户端,并在需要使用Feign的接口上添加@FeignClient注解来标识该接口为Feign客户端接口。

4. Feign与RestTemplate有什么区别?

RestTemplate是Spring框架中的一个HTTP客户端工具,需要手动编写HTTP请求和处理响应。而Feign通过注解方式描述HTTP请求和响应,将请求和响应的处理逻辑与业务逻辑分离。

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

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

相关文章

Seem环境安装

创建虚拟环境 conda create -n seem python3.8 conda activate seem 安装相关依赖&#xff1a;&#xff08;不按照的话会报错&#xff09; sudo apt-get install openmpi-bin libopenmpi-devconda install gcc_linux-64pip install mpi4py 导入环境 export PYTHONPATH$(pwd…

为工业机器人设计提供解决方案——Samtec砷泰连接器

【摘要/前言】 机器人已经与人类社会相处了数十年&#xff0c;这里指的机器人Robots并不是那些登上头条或在技术大会上引起轰动的可爱或未来主义的设计。它们是在幕后工作的机器&#xff0c;负责制造我们日常生活中使用的许多产品。 【机器人设计遇到的难题】 按照今天的标准…

图片批量处理:图片批量缩放,高效调整尺寸的技巧

在数字媒体时代&#xff0c;图片处理已是日常生活和工作中不可或缺的一部分。有时候要批量处理图片&#xff0c;如缩放图片尺寸&#xff0c;以满足不同的应用需求。现在一起来看看办公提效式具如何高效的将图片批量处理方法&#xff0c;快速、准确地批量调整图片尺寸操作。 下…

饥荒Mod 开发(二四):制作一把万能工具

饥荒Mod 开发(二三)&#xff1a;显示物品栏详细信息 源码 饥荒中的每种工具都有独特的功能&#xff0c;比如 斧头用来砍树&#xff0c; 铲子用来 挖东西&#xff0c;鹤嘴锄用来挖矿&#xff0c; 锤子可以敲碎东西&#xff0c;所以我们随身备着4种工具&#xff0c;不仅需要多占用…

浅谈智能型电动机保护器在也门化工行业的应用

1.背景信息Background 现代化工工业中&#xff0c;电动机作为一种拖动机械&#xff0c;成为所有动力机械基础&#xff0c;科学技术不断进步和工艺控制不断完善&#xff0c;尤其是自动化生产要求&#xff0c;迫切需要开发和完善电动机控制和保护设备&#xff0c;实现对生产过程…

论文降重隐藏字符怎么识别 papergpt

大家好&#xff0c;今天来聊聊论文降重隐藏字符怎么识别&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 论文降重隐藏字符的识别方法 一、引言 在论文降重过程中&#xff…

Linux 学习

复制/etc 文件夹到/mnt 目录 cp -r(-a) /etc /mnt回到上一次文件夹 cd -切换到当前用户的家目录_cd ~________________________如何查找ls 命令的位置_______which ls_________________________________请写出ll 命令中查看到的7大文件类型缩写 - s l p c b …

PostgreSQL | FunctionProcedure | 函数与存储过程的区别

文章目录 PostgreSQL | Function&Procedure | 函数与存储过程的区别1. 简述书面说法大白话讲 2. 函数&#xff08;Function&#xff09;2.1 定义2.2 用途2.3 执行2.4 事务处理2.5 说点例子1. 当参数都是IN类时2. 参数中出现OUT、INOUT参数时 3. 存储过程&#xff08;Proced…

路由器介绍和命令操作

先来回顾一下上次的内容&#xff1a; ip地址就是由32位二进制数组 二进位数就是只有数字0和1组成 网络位&#xff1a;类似于区号&#xff0c;表示区域作用 主机位&#xff1a;类似于号码&#xff0c;表示区域中编号 网络名称&#xff1a;网络位不变&#xff0c;主机位全为0 …

C++-类和对象(1)

1.面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完 成。…

数据结构思维导图

数据结构思维导图&#xff0c;目前先写这些&#xff0c;后续有更新会继续。 1 数据结构思维导图

git中的smart checkout和force checkout

切换分支时出现了这个问题&#xff1a; 这是因为shiyan01分支修改了代码,但是没有commit, 所以在切换到test分支的时候弹出这个窗口 一、smart checkout(智能签出) 会把shiyan01分支的改动内容带到test分支。合并处理后的内容就变成了test分支的内容,而shiyan01分支的改动会被…

面试题之二HTTP和RPC的区别?

面试题之二 HTTP和RPC的区别&#xff1f; Ask范围&#xff1a;分布式和微服务 难度指数&#xff1a;4星 考察频率&#xff1a;70-80% 开发年限&#xff1a;3年左右 从三个方面来回答该问题&#xff1a; 一.功能特性 1)HTTP是属于应用层的协议&#xff1a;超文本传输协议…

认识K8S的基本概念和原理

K8S&#xff1a;Kubernetes8个字母省略就是k8s 自动部署&#xff0c;自动扩展和容器化部署的应用程序的一个开源系统 k8s是负责自动化运维管理多个容器化程序的集群。是一个功能强大的容器编排工具。分布式和集群化的方式进行容器管理。 k8s的版本&#xff1a;1.15或1.18。使…

YOLOv8涨点技巧:一种新颖的多尺度滑窗注意力,助力小目标和遥感影像场景

💡💡💡本文全网独家改进:提出了一种新颖的多尺度滑窗注意力机制,有效的应用在遥感影像和小目标场景,实现涨点。 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482 💡💡💡全网独家首发创新(原创)…

【通讯录案例-搭建登录界面 Objective-C语言】

一、来看我们这个通讯录案例 1.接下来啊,我们来做这个通讯录案例, 然后呢,做这么一个应用程序啊, 我们第一步呢,先把界面儿搭了, 然后呢,搭之前,简单的来分析一下, 首先呢,这是,中间儿的这一块儿, 1)有个“账户”、“密码”,这一块儿, 这是一个什么控制器,…

Unity 贝塞尔曲线工具获取运动轨迹

Unity 贝塞尔曲线工具获取运动轨迹 一、介绍贝塞尔曲线二、Unity中贝塞尔曲线工具介绍1.创建一个空物体挂在上BezierSpline.cs脚本组件2.由上图可知刚创建出来的有两个点和两个手柄组成3.我们可修改其坐标看下效果4.这样我们就可以获得这两个点之间的指定数量的点来作为某个物体…

Spring Boot简单多线程定时任务实现 | @Async | @Scheduled

Spring Boot简单多线程定时任务实现 实现步骤 1 创建一个Spring Boot项目 2 定义定时任务&#xff1a; package com.jmd.timertasktest.task;import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.Async; impor…

Linux c++开发-14-IO复用

什么是文件 程序员使用I/O最终都逃不过文件这个概念。 在Linux世界中文件是一个很简单的概念&#xff0c;作为程序员我们只需要将其理解为一个N byte的序列就可以了&#xff1a; b1, b2, b3, b4, … bN 实际上所有的I/O设备都被抽象为了文件这个概念&#xff0c;一切皆文件…

实战 9 权限菜单管理

目录 1、权限菜单后端接口 2、查询权限菜单列表 2.1 设计效果图 2.2 menuList.vue 3、 新增权限菜单 3.1 新增权限菜单窗口代码 3.2 选择所属菜单代码 3.3 封装图标选择器 3.4 新增、编辑和删除权限菜单 1、权限菜单后端接口 package com.cizhu.service;import com.ci…