【问题】feignClient接口既走了正常接口也走了回调接口问题

1. 问题现象
  • 1.调用一次feign接口发现既走了正常接口也走了回调接口
2. 初始代码
  • 1.feign接口
import com.baomidou.mybatisplus.core.metadata.IPage;
/**
 * 信息查询Feign接口类
 *
 */
@FeignClient(
	name="test",
	fallback = ISearchClientFallback.class
)
public interface ISearchClient {

	String API_PREFIX = "/client";
	String LIST_BY_USER = API_PREFIX + "/search/user";

	/**
	 * 用户信息查询
	 * @param name
	 * @param current
	 * @param size
	 * @return
	 */
	@GetMapping(LIST_BY_USER)
	R<IPage<UserVO>> userSearch(
		@RequestParam(value = "name", required = false) String name,
		@RequestParam(value = "current", required = false) int current,
		@RequestParam(value = "size", required = false) int size);

}

  • 2.回调类
/**
 * 信息远程调用失败处理类
 *
 */
@Component
public class ISearchClientFallback implements ISearchClient {
	@Override
	public R<IPage<UserVO>> userSearch(String name, int current, int size) {
		return R.fail("远程调用失败");
	}
}
3. 代码修改
  • 1.feign接口
/**
 * 信息查询Feign接口类
 */
@FeignClient(
	name="test",
	fallbackFactory = ISearchClientFallback.class
)
public interface ISearchClient {

	String API_PREFIX = "/client";
	String LIST_BY_USER = API_PREFIX + "/search/user";

	/**
	 * 用户信息查询
	 * @param name
	 */
	@GetMapping(LIST_BY_USER)
	R<IPage<UserVO>> userSearch(
		@RequestParam(value = "name", required = false) String name,
		@RequestParam(value = "current", required = false) int current,
		@RequestParam(value = "size", required = false) int size);
  • 2.回调接口
@Component
public class ISearchClientFallback implements FallbackFactory<ISearchClient> {
	@Override
	public ISearchClient create(Throwable throwable) {
		// 打印错误日志
		throwable.printStackTrace();
		return new ISearchClient() {
			@Override
			public R<MyPage<UserVO>> search(String userName, Query query) {
				return null;
			}
		};
	}
}

4. 处理
  • 1.将feign接口中的fallback改为fallbackFactory
  • 2.回调接口ISearchClientFallback继承FallbackFactory,并打印错误日志
  • 3.重启服务重新调用接口
5. 异常信息分析
  • 1.异常信息
    在这里插入图片描述
  • 2.说是IPage是接口,不能实例化,因此可以自定义MyPage实现IPage接口进行转化
6. 改过后的代码
  • 1.feign接口

/**
 * 信息查询Feign接口类
 */
@FeignClient(
	name="test",
	fallback = ISearchClientFallback.class
)
public interface ISearchClient {

	String API_PREFIX = "/client";
	String LIST_BY_USER = API_PREFIX + "/search/user";

	/**
	 * 用户信息查询
	 * @param name
	 * @param current
	 * @param size
	 * @return
	 */
	@GetMapping(LIST_BY_USER)
	R<MyPage<UserVO>> userSearch(
		@RequestParam(value = "name", required = false) String name,
		@RequestParam(value = "current", required = false) int current,
		@RequestParam(value = "size", required = false) int size);
}

  • 2.回调接口
/**
 * 信息远程调用失败处理类
 *
 */
@Component
public class ISearchClientFallback implements ISearchClient {


	@Override
	public R<MyPage<UserVO>> userSearch(String name, int current, int size) {
		return R.fail("远程调用失败");
	}
}

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
@FeignClient是一个用于定义和配置Feign客户端的注解。它可以将一个接口标记为Feign客户端,并且可以指定该客户端与远程服务的交互方式。通过在接口上添加@FeignClient注解,我们可以将该接口视为一个Spring Bean,并将其作为一个Service使用。 @FeignClient注解有几个常用的属性可以用于配置客户端的行为。其中,name属性用于指定客户端的名称,url属性用于指定远程服务的URL。通过指定fallbackFactory或fallback属性,我们可以定义当请求失败时的降级处理策略。fallbackFactory属性可以指定一个Fallback Factory类,用于生成降级处理类的实例,而fallback属性则直接指定了降级处理类。 除了上述属性外,@FeignClient注解还可以通过configuration属性指定一个Feign配置类,用于对Feign客户端进行进一步的配置。通过自定义Feign配置类,我们可以配置请求的超时时间、请求拦截器、错误解码器等。 总结起来,@FeignClient注解的作用是定义和配置Feign客户端。通过该注解,我们可以将一个接口标记为Feign客户端,并且可以通过属性配置该客户端的行为,包括指定远程服务的URL、定义降级处理策略以及进行进一步的配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [@FeignClient使用详细教程(图解)](https://blog.csdn.net/weixin_44684812/article/details/125906729)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [关于FeignClient的使用大全——使用篇](https://blog.csdn.net/wangmj518/article/details/123260015)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王佑辉

老板,赏点吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值