iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用FeignClient设置动态Url
  • 673
分享到

使用FeignClient设置动态Url

2024-04-02 19:04:59 673人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录FeignClient设置动态Url1. 需求描述2. 实现方案3. 细节分析FeignClient注解配置url属性实现指定服务方FeignClient设置动态Url 1. 需

FeignClient设置动态Url

1. 需求描述

一般情况下,微服务内部调用都是通过注册中心,eureka,ZooKeeperNacos等实现动态调用,但是对于一些外部Http调用,对于不在同一微服务内,不在同一注册中心的服务调用,可以考虑SpringCloudOpenFeign,而且可以实现动态URL,通过参数动态控制。

2. 实现方案

服务端正常SpringBoot项目,也不一定是springboot项目,只要正常提供RESTFul接口就可以,本次测试以springboot为例。主要是客户端调用。

1.服务端:


@RestController
@RequestMapping("/cateGory")
public class CategoryController {
    
    @Resource
    private CategoryService categoryService;
    
    @GetMapping("/test")
    public Response test() {
        return Response.createSuccessResponse("查询成功", "我是测试服务");
    }
}

2.客户端:

Maven依赖

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

客户端代码


@api(value = "微盟鉴权测试")
@RestController
@RequestMapping("/weimob")
public class ActivityController {
    @Resource
    private CategoryService categoryService;
    @GetMapping("/test")
    @Apioperation(value = "微盟获取Code")
    public Response test() throws URISyntaxException {
        System.out.println("-----测试-----");
        URI uri = new URI("http://localhost:8080/category/test");
        Response response = categoryService.test(uri);
        return Response.createSuccessResponse("查询成功", response);
    }
}

调用接口


@Service("WeimobAuthorize")
@FeignClient(url = "http://localhost:8080/category", name = "CategoryService")
public interface CategoryService {
    @GetMapping
    Response test(URI uri);
}

3. 细节分析

1.接口使用SpringMVC注解

接口方法的定义使用了springMVC的注解 @GetMapping、@RequestParam,其实Springmvc的其他注解在此处都是支持的。(有其他文章提到也支持OpenFeign原有的注解@RequestLine、@Param等,但博主实测是不支持的,相关解析类为 feign.Contract,这个存疑)。

2.springcloud openfeign自动构建实现类

在使用方式上,OpenFeign需要手动构建代理对象,spring cloud OpenFeign 不同于 OpenFeign, Spring Cloud OpenFeign 帮我们自动生成了接口的代理对象(即实现类),并且注册到Spring中,我们可以很方便的使用 @Autowired 注入代理对象然后使用。

其默认的代理对象是 LoadBalancerFeignClient。还有一个代理对象是 feign.Client.Default。

两者区别在于:LoadBalancerFeignClient 通过服务名(下文提到)从Eureka查找相关的节点地址url,发起调用。feign.Client.Default 仅是简单的直接调用。

3.FeignClient属性name与URL一定要指定

@FeignClient(url = “http://localhost:8080/category”, name = “CategoryService”)

name 属性,是@FeignClient 注解必要的,不定义时会报错其默认指代Eureka上的服务名。

url 属性,一定要指定,这是重点了! url属性指定什么值其实不重要,因为最终都会被方法的URI参数值替换掉,它在这里另一个重要的作用,就是将接口的代理对象变成feign.Client.Default(上文提到默认是LoadBalancerFeignClient),这样就绕过了从Eureka取节点地址这一步,毕竟第三方的地址不可能注册到我们的Eureka上。(相关细节可自行debug FeignClientFactoryBean.getTarget())

FeignClient注解配置url属性实现指定服务方

某天,跟同学聊天,同学说起之前面试的时候面试官提的一个问题:使用spring cloud,现在某个服务有一个新的接口需要验证。该接口目前只上线了一台机器,如何指定调用方只调用这台机器。问题大致如此,可能有些出入。总结起来,就是希望能够指定访问某台机器。这样的情况,在我们平时也可能经常遇到。比如甲乙两人需要调试新接口,但注册中心只有一个。可能上面有丙丁戊己庚辛注册的服务。如果我们按照默认的轮询的负载均衡规则去调用,七次调用才能轮到乙的服务,根本没有办法调试。所以这时候就需要我们能够指定调用的服务方。

FeignClient注解通过配置url属性可以指定调用的服务方。我们按照上面的例子,假设乙的IP为192.168.1.2,在端口8080上启动的服务,那我们就可以把我们的url配置成http://192.168.1.2:8080。这样调用的就一直是乙的服务了。

那我们配置了url和不配置url到底产生了哪些不同呢?

feign,或者说open-feign底层是使用,我以为默认是httpclient,但是我debug的结果是HttpURLConnection。知道为什么的可以留言告诉我。feign会基于配置,生成URI。当我们不配置url的时候,URI是这样的http://service-name/path。使用FeignClien是LoadBalancerFeignClient,该类在处理该URI的时候会对服务名进行解析,也就是从注册中心查询该服务名下已经注册的服务器信息,包括IP和端口。然后将服务名替换成真实的链接。而当我们不配置url的时候,使用的FeignClient是Client的默认实现Default,该类就没有解析的这一步而是直接通过HttpURLConnection进行请求。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 使用FeignClient设置动态Url

本文链接: https://www.lsjlt.com/news/152859.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用FeignClient设置动态Url
    目录FeignClient设置动态Url1. 需求描述2. 实现方案3. 细节分析FeignClient注解配置url属性实现指定服务方FeignClient设置动态Url 1. 需...
    99+
    2024-04-02
  • FeignClient 设置动态url
    引入  org.springframework.cloud:spring-cloud-loadbalancer 依赖包 feign server端nacos添加 loadbalancer.ribbon.enabled 配置  spring...
    99+
    2023-09-24
    java eureka spring cloud
  • 怎么使用FeignClient设置动态Url
    本文小编为大家详细介绍“怎么使用FeignClient设置动态Url”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用FeignClient设置动态Url”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Fei...
    99+
    2023-07-02
  • FeignClient如何通过配置变量调用配置文件url
    目录通过配置变量调用配置文件url调用指定的动态URL1 创建demo1服务2 创建demo2服务测试通过配置变量调用配置文件url 1.application.yml 配置文件配置...
    99+
    2024-04-02
  • FeignClient怎么通过配置变量调用配置文件url
    这篇文章主要介绍“FeignClient怎么通过配置变量调用配置文件url”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“FeignClient怎么通过配置变量调用配置文件url”文章能帮助大家解决问...
    99+
    2023-07-02
  • 如何使用Feign动态设置header
    今天小编给大家分享一下如何使用Feign动态设置header的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Feign动态设置...
    99+
    2023-06-29
  • vue如何动态设置class、动态设置style
    目录vue动态设置class、stylevue动态添加样式 :style 和 :class:style如下:class如下 vue动态设置class、style //动态c...
    99+
    2022-11-13
    vue动态设置class vue动态设置style 动态设置class style
  • 如何使用uniapp动态设置宽度
    随着移动互联网的发展,越来越多的开发者开始学习和使用uniapp来快速开发实用的移动App。在开发过程中,动态设置组件的宽度是一个非常常见的需求。本文就将介绍如何使用uniapp动态设置宽度,让你的应用在不同的设备上都能够有着很好的视觉效果...
    99+
    2023-05-14
  • windows使用netsh设置静态&动态ip的脚本
    使用netsh设置静态ip地址: 复制代码代码如下: @echo off netsh interface ip set address "本地连接" static 172.24.83.239 255.255.255.0 ...
    99+
    2023-05-29
    静态ip 动态ip 脚本 windows netsh 静态
  • 使用Feign动态设置header和原理分析
    目录Feign动态设置header和原理例如先说解决办法设置Feign的header信息(两种形式)1.在方法参数前面添加@RequestHeader注解2.实现RequestInt...
    99+
    2024-04-02
  • 如何使用JavaScript动态设置CSS3属性值
    这篇文章将为大家详细讲解有关如何使用JavaScript动态设置CSS3属性值,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用JavaSc...
    99+
    2024-04-02
  • 使用van-picker 动态设置当前选中项
    目录van-picker 动态设置当前选中项van-picker 选择器空白问题van-picker 动态设置当前选中项 使用vant-field和van-picker、van-po...
    99+
    2022-11-13
    van-picker 设置选中项 van-picker设置选中项
  • 使用celery怎么动态设置定时任务
    使用celery怎么动态设置定时任务?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。celery的beat运行过程。上图是beat的主要组成结构,beat中包含了...
    99+
    2023-06-08
  • Python Django URL 配置秘籍:通往动态 web 应用的大门
    1. URL 模式语法 URL 模式是定义 URL 与视图之间映射的表达式。其语法如下: path("<path_expression>", "<view_function_name>", name="<ur...
    99+
    2024-04-02
  • feign调用实现url和接口路径的动态配置化
    做接口开发请求第三方服务的接口,大概率会用feign做请求,而feign也是最常用的一种rpc框架; 这里主要是说明在进行feign请求的时候,第三方服务的url和接口也是可以通过读取配置文件的配置,来进行请求的; 至于为什么要把接口和ur...
    99+
    2023-09-06
    java 后端
  • ubuntu如何设置动态ip
    ubuntu设置动态ip的方法:1.打开终端;2.输入命令查看网卡名称;3.再输入命令查找网络配置文件;4.修改网络配置文件内容;5.输入命令使修改生效。ubuntu设置动态ip的方法:打开终端命令行。输入以下命令查看网卡名称。$ ifco...
    99+
    2024-04-02
  • ubuntu怎么设置动态ip
    这篇文章主要介绍了ubuntu怎么设置动态ip的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ubuntu怎么设置动态ip文章都会有所收获,下面我们一起来看看吧。打开终端命令行。输入以下命令查看网卡名称。$ if...
    99+
    2023-07-04
  • win10如何设置动态壁纸
    这篇文章主要介绍了win10如何设置动态壁纸的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇win10如何设置动态壁纸文章都会有所收获,下面我们一起来看看吧。   win10设...
    99+
    2024-04-02
  • 如何设置动态ip地址
    这篇文章主要讲解了“如何设置动态ip地址”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何设置动态ip地址”吧!DynamicIP是指在需要时分配IP地址的方法。相应地,动态IP地址与静态I...
    99+
    2023-06-25
  • 怎么设置动态ip地址
    这篇文章主要为大家展示了“怎么设置动态ip地址”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么设置动态ip地址”这篇文章吧。DynamicIP是指在需要时分配IP地址的方法。相应地,动态IP地...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作