OpenFeign根据服务名动态调用服务

配置化Feign接口动态切换URL 动态切换Feign接口URL 阅读详情

本文作为springboot注解Aspect文章的补充,切面拦截方法,将方法所有信息及服务名称持久化到数据库。
审批的时候,从数据库获取服务名称动态调用服务。

实体类

示例中的响应实体类

@Getter
@Setter
public class Response<T> {

    private String code;
    private String msg;
    private String description;
    private T data;
}

示例中的方法参数实体类

@Getter
@Setter
public class ProcessCheckDTO {

	private ProcessCheckModel processCheckModel;
	
	private MethodInfo methodInfo;
}
@Setter
@Getter
public class ProcessCheckModel {
	
	/**
	 * 0-审批通过 1-审批拒绝
	 */
	private String checkType;
	
	/**
	 * 审批拒绝原因
	 */
	private String reason;
}

拦截的方法实体类

@Getter
@Setter
public class MethodInfo {
	
	//spring.application.name,项目名称
	private String appName;

	//bean的目标类全限定名
	private String targetClassName;
	
	//拦截到的service方法名
	private String methodName;
	
	//拦截到的service入参类型,包含泛型信息
	private String paramTypes;
	
	//拦截到的service入参值
	private String paramArgs;
	
}

下面的才是最重要的

先写一个FeignCient接口

/**
 * 接口上不需要任何注解
 */
public interface ProcessClientApi {

	@PostMapping(value = "/processCheck", consumes = MediaType.APPLICATION_JSON_VALUE)
	public Response<?> process(@RequestBody ProcessCheckDTO processCheckDTO);
}

再写一个Bean用来动态获取ProcessClientApi

import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.openfeign.FeignClientBuilder;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

@Component
public class DynamicProcessFeign {
	
	//缓存feignClient,提高客户端性能
	private static volatile Map<String, ProcessClientApi> processMap = new HashMap<>();

	private FeignClientBuilder feignClientBuilder;
	
	public DynamicProcessFeign(@Autowired ApplicationContext appContext) {
        this.feignClientBuilder = new FeignClientBuilder(appContext);
    }
	
	public ProcessClientApi getFeignClient(String seviceName) {
		ProcessClientApi api = processMap.get(seviceName);
		if (api != null) {
			return api;
		}
		synchronized (DynamicProcessFeign.class) {
			api = processMap.get(seviceName);
			if (api != null) {
				return api;
			}
			api = this.feignClientBuilder.forType(ProcessClientApi.class, seviceName).build();
			processMap.put(seviceName, api);
		}
        return api;
    }
}

使用

private void process(ProcessRecordExecuteVO vo) {
		ProcessCheckDTO processCheckDTO = new ProcessCheckDTO();
		ProcessCheckModel processCheckModel = new ProcessCheckModel();
		processCheckModel.setCheckType(vo.getAccept());
		processCheckModel.setReason(vo.getReason());
		processCheckDTO.setProcessCheckModel(processCheckModel);
		ProcessMethodInfo processMethodInfo = processMethodInfoMapper.selectById(vo.getBatchId());
		if (processMethodInfo == null) {
			throw new BizException("未找到数据");
		}
		MethodInfo methodInfo = new MethodInfo();
		methodInfo.setAppName(processMethodInfo.getAppName());
		methodInfo.setTargetClassName(processMethodInfo.getTargetClassName());
		methodInfo.setMethodName(processMethodInfo.getMethodName());
		methodInfo.setParamTypes(processMethodInfo.getParamTypes());
		methodInfo.setParamArgs(processMethodInfo.getParamArgs());
		processCheckDTO.setMethodInfo(methodInfo);
		
		/*
		 * 下面的两行代码是动态调用服务的用法
		 */
		
		//传入服务名称获取对应的FeignClient
		ProcessClientApi processClientApi = dynamicProcessFeign.getFeignClient(methodInfo.getAppName());
		//通过OpenFeign调用远程服务
		processClientApi.process(processCheckDTO);
	}
使用FeignClientBuilder根据不同服务名动态创建FeignClient 需求描述:向注册中心注册了多个不同名的服务,但是API相同,使用openFeign动态的根据不同的服务名请求具体的API,使用FeignClientBuilder创建不同的feignClient,解决方案如下。 添加依赖 版本号根据自己项目选择 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>sprin 阅读详情

相关推荐

关于SpringCloud的Feign组件的动态调用

微服务SpringCloud中使用越来越多的服务将业务进行隔离,相互之间使用feign进行调用,但是在使用的时候我们遇到一个问题,每次调用一个新的服务的使用,都要手动的使用@FeignClient注解去申明调用一个服务,问题来了,如果需要调用多个服务,那我们是不是就需要手动的配置多个,于是找了很多博客后,加上自己的实际实践,总结了feign组件的动态调用,可以方便我们的程序开发,省去很多不必要的代码,但由此可能会带来一些feign的性能问题,没有详细测试中,希望使用的朋友们不要忘了测试一下性能哈 首先,.

qq_41223443的博客 3341

feign动态服务名、路径(亲测可用)

业务:同一个服务,需要部署在两台服务器上,连的是同一个nacos,现需要根据配置,将数据存储在各自服务器上,所以我们需要将其中一个服务改个服务名和路径部署,需要在业务上就判断他是存在属于哪个服务上的,才能去调用那个服务的feign接口。重新再放个feign接口也不动态,万一后面又加了很多个服务,又要改代码,所以我们的解决办法就是动态服务名和路径。 我们都知道feign调用的时候路径是 http://服务名/路径 / 所以我们如果要动态的调用,就需要替换服务名和路径。 1、新增替换url的配置 就是把有/

qq_48721706的博客 6637

Python+OpenCV实战:5分钟搞定机械臂手眼标定(眼在手上模式)

本文详细介绍了使用Python和OpenCV在5分钟内完成机械臂手眼标定(眼在手上模式)的实战教程。通过解析相机坐标系与机械臂基坐标系的转换关系,提供从数据采集到标定矩阵计算的全流程代码实现,帮助开发者快速解决AX=XB问题,提升机械臂视觉引导精度。

weixin_33670786的博客 495

Feign动态定义调用serverName与path

feign动态调用

EndTheme_Xin的博客 4115

TI官方PSpice for TI安装避坑指南:从申请Key到解决器件搜索栏空白(附详细步骤)

本文详细介绍了PSpice for TI的安装与配置全流程,包括申请Key、解决器件搜索栏空白等常见问题。通过分步指南和实战避坑技巧,帮助工程师高效完成安装并优化性能,确保电路仿真工具的正常使用。

weixin_29299807的博客 1064

雷达杂波的基础知识

例如工作在海上的机载雷达,航行在海上的船用雷达,它们都不想要海杂波,会影响它们对小目标的检测,从而以为“漏掉”海面飞行的巡航导弹而被击毁。海杂波的反射系数是非常复杂的,影响的因素很多,除了和雷达参数有关,显然还和海况息息相关,经验模型经常将反射系数表示成海况的函数,在不同条件和不同模型的情况下,反射系数的值不同。说到“杂波”,你可能想到的就是如何去抑制它,去减少它在雷达回波中的分量,在很多情况是这样的。云雨的反射对飞机雷达来说是不希望的,但确是气象雷达所利用的,可以用来测量降雨率,提升天气预报的准确性。

qq_43416206的博客 2131

openFeign源码学习

所以,openFeign其实底层,就是通过代理对象的方式,帮我们去发起远程调用,在代理对象中,会分别区分使用微服务名进行负载均衡的逻辑和程序员直接指定ip、端口的方式,本质上没太大的区别,只是一个集成了ribbon,一个直接发起调用。

小小少年的博客 724

华为FusionCharge 720kW液冷直流快充桩主电流全路径深度详解

本文档详细介绍了华为FusionCharge 720kW液冷分体式直流充电系统的主电流路径全链路解析,适用于配套DS720-720LCNA1充电主机及DT600L1-CNA1液冷终端、DT250N2-CNA1自然冷终端的运维工作。内容涵盖从电网交流输入到电动汽车充电的全过程,重点解析交流门、整流正门、主控正门等五大柜门区域的核心元器件分布及功能,包括额定参数、安全规范、故障排查等关键运维知识。操作人员需持有高压电工证并通过专项培训,作业时必须严格遵守断电验电、穿戴PPE防护装备等安全红线。文档通过16个关键

2401_84939870的博客 745

服务调用- OpenFeign

一、介绍 OpenFeign实现服务间调用,是Feign的升级版本; 整合了Ribbon; 在服务调用方进行配置; 服务调用方和服务调用方都需要注册到注册中心; 二、案列演示 1. 服务提供方Controller package com.zte.cloud.payment.controller; @RequestMapping("/provider") @RestController public class ProviderController { @GetMapping("/getNam

weixin_43374578的博客 283

超详细!思岚S2激光雷达hector_mapping建图

使用思岚S2激光雷达,在ros平台上利用hector_mapping功能包实现建图功能

m0_50965539的博客 5590

多个linux系统安装到一块硬盘(Kylin+UOS+ubuntu)

之前写过一篇类似的文档,笔者把kylin和UOS安装在一块硬盘上上一篇的文档地址多个linux系统安装到一块硬盘(Kylin+UOS)_银河麒麟系统和uos安装成双系统-优快云博客本次记录的是三个系统到一块硬件上银河麒麟:Kylin-Desktop-V10-SP1-Release-2107-arm64统信:uniontechos-desktop-20-professional-1050-arm64乌班图:ubuntu-22.04.5-live-server-arm64。

aggs1990的专栏 565

Spring-cloud-openfeign动态确定服务名service-name

Spring-cloud-openfeign动态指定服务名service-name背景解决方法示例代码 背景 一个超级大系统,为了应对超大吞吐量,需要把业务服务划分成不同的业务单元,每个业务单元是一个服务集群,然后根据一定的规则,把请求路由到不同的业务单元。 如一个客户服务customer-service,我们部署成n个业务customer-service-0到customer-service-n...

weixin_45357522的博客 1万+

Python 爬虫实战:爬取微博热搜与用户评论数据

本文系统讲解微博热搜榜单与用户评论数据的爬取技术方案。针对微博热搜榜采用Requests+BeautifulSoup解析静态HTML结构,实现高效爬取;对于动态加载的评论数据,使用Selenium模拟浏览器行为规避反爬机制。详细阐述技术选型、反爬策略、数据清洗及存储方法,提供完整代码实现和输出示例。同时强调合规要求,提示开发者需在遵守平台规则的前提下进行数据采集。该方案为舆情分析和热点研究提供了可落地的技术实现路径。

2503_91057718的博客 1712

OpenFeign 实现动态服务名调用指南及其具体实现方法

在微服务架构中,我们经常需要根据动态传入的服务名来远程调用其他服务。例如,你的业务中可能有多个子服务:service-1、service-2……需要动态决定调用哪个。

qq_46371374的博客 1756

Python爬虫教程:抓取Android或iOS应用中的数据

随着智能手机的普及,移动应用程序已经成为我们生活中不可或缺的一部分。从社交媒体、在线购物到金融服务和健康管理,几乎所有领域都有相应的手机应用程序(App)服务用户。而这些应用程序通常会存储大量的数据,例如用户行为、产品信息、订单记录等。如果我们能有效地抓取这些数据,可以为数据分析、商业智能、用户行为分析等提供有力支持。本文将重点介绍如何使用Python爬虫技术抓取Android或iOS应用中的数据,尤其是如何从这些应用的后端接口、存储、或网页中提取数据。我们将探讨如何通过反向工程技术访问移动应用中的API接

2201_76125261的博客 800

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

OpenFeign调用服务的核心原理解析

引言 OpenFeign在分布式服务中运用非常广泛,他和RPC所要达到的效果一致,就是为了简化远程服务调用的操作,通过使用OpenFeign可以使得调用远程服务就像调用本地服务一样方便。 但是其和RPC在实现上还是不太一样,不一样的地方主要还是调用的方式,OpenFeign是内部实现了rest服务调用,从而一个本地服务调用远程服务的接口时,主要还是通过rest服务调用的方式,那么对于服务端的要求就是其服务需要将这个接口通过rest暴露出来,不然OpenFeign将无法工作;而RPC则不需要服务端将该接口以r

曳凡的博客 7371

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

OpenFeign服务接口调用

Netflix Feign 是 Netflix 公司发布的一种实现负载均衡和服务调用的开源组件。Spring Cloud 将其与 Netflix 中的其他开源服务组件(例如** Eureka、Ribbon 以及 Hystrix** 等)一起整合进 Spring Cloud Netflix 模块中,整合后全称为 Spring Cloud Netflix Feign。Feign 对Ribbon进行了集成,利用 Ribbon 维护了一份可用的服务列表信息,并且通过轮询实现了客户端的负载均衡。

梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记 3938

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

OpenFeign - 无缝集成 Nacos:通过服务名自动发现并调用实例

本文介绍了OpenFeign与Nacos的集成使用,通过服务名实现自动服务发现和调用。主要内容包括: OpenFeign简介:声明式HTTP客户端,简化服务调用 Nacos介绍:服务发现和配置管理平台 两者结合的优势:自动服务发现、负载均衡、声明式API等 环境准备:Java、Maven、Nacos Server等 示例项目结构:用户服务(Provider)和订单服务(Consumer) 用户服务构建步骤: 添加Spring Boot、Nacos、OpenFeign等依赖 配置application.yml

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

SpringBoot动态创建FeignClient,根据Eureka服务名调用服务

本文基于SpringCloud,使用的前提是客户端要与服务端注册到相同的eureka上,同时项目(SpringCloud)整合HttpServlet,通过HttpServlet自定义对外接口 导入SpringCloud的opnefeign的pom依赖 <dependency> <groupId>org.springframework....

rumenxiaobaidog的博客 7974

Spring-cloud-openfeign3.0服务单元化动态指定服务名

背景 上次写了一篇关于Spring-cloud-openfeign 2.x版本的单元化动态指定服务名的方法,那个方法是由于Spring-cloud-openfeign的Targeter是package范围的接口,不允许自行实现,不得已面变通的方法。后来我又直接和Spring-cloud-openfeign开发团队联系,让他们改了一些东西,最近发现他们已经按我的建议修改了,而且已经发布到了Spring-cloud-openfeign 3.0.0.M2版本里面了。所以今天就按照新的方法来优雅地实现单元化动态指定

weixin_45357522的博客 7323

OpenFeign的服务调用原理

用户

qq_42098875的博客 5259

OpenFeign和Feign的区别(微服务间调用简单总结)

08年出来做外包,用过Cloud,当时微服务间的相互调用用的还是Feign,其中两年没做过Cloud的项目开发了,重新学了新版本,才知道老一辈那些组件都已经停更了。现在用的都是OpenFeign,简单的理解为Feign的升级版。 区别: 同: Feign和OpenFeign作用一样,都是进行远程调用的组件。 里面都内置了Ribbon。 都是加在消费端的注解,让消费端可以调用其他生产者的服务。 异: 依赖不同,一个是spring-cloud-starter-feign,一个是spring-cloud-star

whiteBearClimb的博客 2万+

使用OpenFeign实现服务远程调用

​​​​​​​当微服务架构日益普及,服务之间的远程调用变得至关重要。在这一背景下,OpenFeign作为一个强大的HTTP客户端框架简化了服务之间的远程通信。本文旨在介绍如何运用OpenFeign实现服务远程调用。

Rye的博客 2302

openFeign服务调用

文章目录openFeign设计原理传统http请求流程openFeign流程实践 openFeign设计原理 openFeign是轻量级的Http请求框架,不再像restTemplate那样显式声明请求URL,参数,返回类型,直接通过模块化的思想,将服务调用层封装为一个模块,在controller层像调用普通service那样调用,相对更加直观。封装了Http调用流程,更适合面向接口化的变成习惯 传统http请求流程 类似httpclient,restTemplate,OkHttp都是如此 openFei

kevin的博客 1747

OpenFeign远程调用实现

OpenFeign远程调用实现

莫须有的博客 3219
上一篇: Elasticsearch使用script更新long类型的数据
下一篇: Mysql更新百万历史数据
daodfs1
博客等级 码龄9年 45粉丝 81原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值