首页 > 其他分享 >openfeign使用中不能加@RequestMapping和@Async失效的情况总结

openfeign使用中不能加@RequestMapping和@Async失效的情况总结

时间:2024-10-24 18:01:55浏览次数:8  
标签:调用 RequestMapping openfeign 接口 注解 Async 方法

1.openfeign使用中不能加@RequestMapping

当在openfeign实现远程调用的时候,添加上了@RequestMapping注解,导致服务无法启动。
image
控制台报错消息如下
image
主要会产生三种问题:

·与消费方服务原有接口产生冲突

·多个协议包中的RPC接口冲突

·使网关路由失效

如图:
image

原因:

扫描到的FeignClient接口会被注册为一个SpringBean (即使是消费方)。

Spring认为类上携带RequestMapping注解的Bean会是一个Handler (对于消费方来说, 这是一个错误的判定)。

一个应用中不允许注册多个相同的URL Handler, 所以如果消费方已有的接口URL与RPC接口的URL相同时就会报错。

对于网关, 请求进入网关时, 假设网关自身存在匹配URL的Handler, 则会短路处理, 而不会再去通过路由转发至下游 (实质上这并不是网关真实的Handler), 这导致了路由的失效。

解决办法:

1.将FeignClient接口上的RequestMapping注解转移到对应的实现类上。
image

2.在FeignClient接口注解上添加 path 属性, 值与实现类的RequestMapping值相同
image

@Async失效的情况总结

1.未启动异步支持:在服务的启动类上未添加@EnableAsync注解
2.同一个类中调用:在同一个类中调用@Async注解的方法,由于是基于动态代理来实现异步调用,该机制无法拥有与同一个类的方法调用上,事务同理
3.未通过代理调用方法:在this上调用一个带有@Async的方法,无法实现代理,原理同上
4.未被spring容器管理:@Async必须实在被spring管理的bean中被调用。
5.方法修饰符问题:方法不能是有static或者final修饰的
6.异常处理:异步方法内抛出异常但未作处理,执行会被中断,导致@Async注解失效
7.访问修饰符:@Async注解的方法不是publish修饰的方法导致失效
8.事务管理影响:异步方法处于@Transactional方法内,由于事务传播导致方法同步执行,需要设置事务传播属性或者独立异步方法。

标签:调用,RequestMapping,openfeign,接口,注解,Async,方法
From: https://www.cnblogs.com/trytodo/p/18500065

相关文章

  • 异步函数 async function
    ◼async关键字用于声明一个异步函数:async是asynchronous单词的缩写,异步、非同步;sync是synchronous单词的缩写,同步、同时;◼async异步函数可以有很多中写法asyncfunctionfoo(){}constfoo1=asyncfunction(){}constfoo2=async()=>{}classPerson{asyncfoo......
  • 微服务之nacos&openfeign
    nacos使用方法:在docker容器中创建nacosdockerrun-d\--namenacos\--env-file./nacos/custom.env\-p8848:8848\-p9848:9848\-p9849:9849\--restart=always\nacos/nacos-server:v2.1.0-slim网址为ip:8848/nacos,账号密码都是nacos 服务注册:在pop.xml中引......
  • script 标签中 defer 和 async 的区别
    https://www.cnblogs.com/huangtq/p/18422775 在 <script> 标签中,defer 和 async 是两个用于控制JavaScript脚本加载和执行行为的属性。它们的主要区别在于加载顺序和执行时机。具体如下:1. defer 属性加载方式:使用 defer 的脚本在HTML解析的同时异步加载。......
  • dockerfile中nuget源加载失败Retrying 'FindPackagesByIdAsync' for source 'xxx'
    问题描述:最近jenkins打包总是提示微软源加载不到Retrying'FindPackagesByIdAsync'forsource'https://api.nuget.org/v3-flatcontainer/microsoft.extensions.primitives/index.json'.Anerroroccurredwhilesendingtherequest.解决方案:dockerfile中添加国内源,改用华......
  • 第147篇:开发中Promise的使用(async,await)
    好家伙, 0.错误描述今天在开发中犯了一个比较严重的错误对于Promise的错误使用 场景:微信小程序中展示搜索条件列表//API请求工具函数constapiRequest=(url,method='GET',headers={})=>{returnnewPromise((resolve,reject)=>{wx.request({......
  • C# UDP通信 ReceiveAsync() 一直等待问题
    问题描述两个C#应用,一个作为服务端Server,另一个作为客户端Client,客户端打开一个Udp端口,循环接收数据;服务端开启后向客户端发送指令,当服务端出现异常时关闭了服务端的UdpClient,此时客户端卡死在_client.ReceiveAsync(),无法再接收到消息。客户端代码:try{varcts=newCanc......
  • 深入理解 JavaScript 异步:掌握 Promise、Async/Await 与 Promise.all 全指南
    博文:深入理解JavaScript中的Promise、await、.then()和Promise.all()在现代JavaScript中,处理异步操作时,Promise、async/await和Promise.all()是关键工具。本文将深入讲解它们的用法及实现,并结合实际例子。1.Promise的基本使用Promise是一种处理异步操作的方式。......
  • C++异步调用 future async promise packaged_task
    背景:C++异步调用是现代C++编程中的一种重要技术,它允许程序在等待某个任务完成时继续执行其他代码,从而提高程序的效率和响应性。C++11引入了std::async、std::future和std::promise等工具,使得异步编程变得更加方便和直观。以下是关于C++异步调用的详细介绍,包括基本概......
  • JS异步编程精通之路(一):Callback、Promise、Async/Await 和 Observable 深度对比
    在现代JavaScript编程中,异步操作是常见且必不可少的部分。处理异步的方式多种多样,其中最常见的有Callback、Promise、Async/Await,以及近年来随着响应式编程(ReactiveProgramming)理念兴起的Observable。本文将对这几种异步处理方式进行对比,帮助你理解它们各自的优缺点,以......
  • 两段相同的代码【async await】
    asyncfunctiondoSubmitFile(){constfileInput=document.getElementById('fileInput')constfileObj=fileInput.files[0]constformData=newFormData()formData.append('file',fileObj)try{constresponse=await_axi......