首页 > 其他分享 >openfeign应用汇总(三)

openfeign应用汇总(三)

时间:2023-08-07 21:55:59浏览次数:29  
标签:paramResponse return String openfeign 汇总 应用 org import public

openfeign应用汇总(三)

1、自定义统一处理正确返回结果(实现Decoder)

import java.io.IOException;
import java.lang.reflect.Type;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import feign.Response;
import feign.Util;
import feign.codec.DecodeException;
import feign.codec.Decoder;

public class FeignResultDecoder  implements Decoder{
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    public Object decode(Response paramResponse, Type paramType) throws IOException{
        if(paramResponse.body() == null) {
            throw new DecodeException(paramResponse.status(), "没有返回数据", paramResponse.request());
        }
        try {
            String res = Util.toString(paramResponse.body().asReader(Util.UTF_8));
            logger.info("result :"+res);
            return res;
        } catch (Exception e) {
            throw  new IOException("无法解码返回报文",e);
        }
    }
}

2、自定义统一处理错误返回结果(实现ErrorDecoder)

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.kayak.exception.ErrorException;

import feign.Response;
import feign.Util;
import feign.codec.DecodeException;
import feign.codec.ErrorDecoder;

public class FeignErrorDecoder  implements ErrorDecoder{
    
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    String result = "远程调用出现异常"; 

    @Override
    public Exception decode(String paramString, Response paramResponse) {
        logger.info("erorStatus:"+paramResponse.status());
        if(paramResponse.body() == null) {
            throw new DecodeException(paramResponse.status(), "没有返回数据", paramResponse.request());
        }
        try {
            result = Util.toString(paramResponse.body().asReader(Util.UTF_8));
            logger.info("异常result:"+result);
            return new ErrorException(paramResponse.status()+"", result);
        } catch (Exception e) {
            return new ErrorException("999"+"", result);
        }
    }
}

3、使自定义解码器生效

@Configuration
public class FeignClientConfiguration{

    @Bean
    public Logger.Level feignLogLevel(){
        // 配置日志级别
        return Logger.Level.FULL;
    }

    @Bean
    public Decoder feignDefDecoder() {
        return new FeignResultDecoder();
    }

    @Bean
    public ErrorDecoder feignErrorDecoder() {
        return new FeignErrorDecoder();
    }

} 

4、Nacos配置加载并自动进行刷新

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
import lombok.Data;

@RefreshScope ###更新nacos配置自动刷新
@Component
@Data
public class NacosConfig {

    @Value(value="${weixin.wechatMchId}")
    private  String  wechatMchId;
    
    @Value(value="${weixin.appid}")
    private  String  appid;
}

5、hystrix熔断机制,抛出自定义异常或者捕捉原异常

###方式一 实现feignClient接口 ###直接抛出自定义异常
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import com.kayak.common.base.entity.BaseRequest;
import com.kayak.integration.client.UserInfoFeignClient;
import com.kayak.message.domain.base.UserInfoRequest;
@Component
public class UserInfoFeignClientFallBack implements UserInfoFeignClient{
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    public String getUserInfo(BaseRequest<UserInfoRequest> baserequest) {
        logger.info("远程调用出现异常");
        return "远程调用出现异常";
    }
}


###方式二 实现FallbackFactory接口 ###捕捉原定义异常信息
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import com.kayak.integration.client.WxSendFeignClient;
import com.kayak.message.domain.base.CouponsRequest;

import feign.hystrix.FallbackFactory;
@Component
public class WxSendFeignClientFallBack implements FallbackFactory<WxSendFeignClient>{

    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    @Override
    public WxSendFeignClient create(Throwable error) {

        return new WxSendFeignClient() {
            @Override
            public String queryCoupon(String openId, String coupon_id, String token, String appid) {
                String errStr = error.getMessage();
                logger.info("远程调用出现异常,error:"+errStr);
                return errStr;
            }
            @Override
            public String getCoupons(CouponsRequest couponsRequest, String openId, String token) {
                String errStr = error.getMessage();
                return errStr;            
            }
        };
    }
}

 

标签:paramResponse,return,String,openfeign,汇总,应用,org,import,public
From: https://www.cnblogs.com/vincentYw/p/17612830.html

相关文章

  • openfeign应用汇总(二)
    openfeign应用汇总(二)1、开启feign日志importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importfeign.Logger;importfeign.codec.Decoder;importfeign.codec.ErrorDecoder;@Configurationpublicclas......
  • linux内网穿透应用场景有哪些?快解析有什么用处?
    随着网络技术的不断发展,无论是工作上还是在生活中人们对网络的依赖和需求越来越高。Linux内网穿透作为一种创新的解决方案,为我们提供了无限可能。首先我们了解一下Linux操作系统。Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程......
  • 打开电脑中应用程序及问题解决方案
    1、使用os.system()函数:示例代码importosos.system("notepad.exe")这将在Windows系统上打开记事本应用程序。2、使用subprocess示例代码:importsubprocesssubprocess.Popen(['notepad.exe'])3、使用webbrowser示例代码:importwebbrowserwebbrowser.open('http://www.goog......
  • 3D组态编辑器,零代码拖拉拽轻松构建数字孪生应用场景
    随着《中国制造2025》计划的提出,在国家数字化转型利好政策和行业发展趋势双向驱动加持下,数字孪生成为这两年数字经济发展的关键核心技术应用之一。中服云物联网开发平台组态编辑器,零代码拖拉拽轻松构建2D/3D数字孪生场景。企业生产、制造、运营等各类场景,以清晰、明确、实时的可视......
  • 从 SOCKS5、SK5 到 IP 代理的网络安全与应用
    在当今数字化时代,网络已经成为人们生活和工作中不可或缺的一部分。然而,随着网络的普及,网络安全问题也愈发凸显。为了保护个人隐私、绕过地理限制、加强网络安全,代理服务器技术应运而生。本文将深入探讨SOCKS5代理、SK5代理和IP代理等相关概念,探讨其在网络安全、爬虫和其他应用......
  • DELPHI应用EXCEL(4) 使用TOLEContainer控件
    严格的来说,tolecontainer控件并不是一个EXCEL控件,而是一个所有OLE文件的控件,可以用它打开PDF、OFFICE、TXT文件等等。而且使用OLECONTAINER控件打开的文件,文件内容依旧是一个VARIANT类型的数据。OLECONTAINER控件在SYSTEM组下。 使用OLECONTAINER控件需要注意以下几点:1、一......
  • 微前端的优势在哪里?为何能够打败单体应用架构
    微前端是一种类似于微服务的架构,是一种由独立交付的多个前端应用组成整体的架构风格,将前端应用分解成一些更小、更简单的能够独立开发、测试、部署的应用,而在用户看来仍然是内聚的单个产品。有一个基座应用(主应用),来管理各个子应用的加载和卸载。所以微前端不是指具体的库,不是指具......
  • Linux常用的shell命令汇总
    本文介绍Linux系统下常用的系统级命令,包括软硬件查看、修改命令,有CPU、内存、硬盘、网络、系统管理等命令。说明命令是在Centos6.464位的虚拟机系统进行测试的。本文介绍的命令都会在此Centos下运行验证(也有部分命令会在suse/ubuntu系统里测试的,会做特明说明),但运行结果就不再列出......
  • Delphi ShellExecute为应用程序传递多个参数
    开发环境DelphiXe11.3 调用的程序  procedureTForm2.Button1Click(Sender:TObject);begin//某个参数包含空格时(用""),如下面这行;这里传递过去是3个参数ShellExecute(handle,'open',pchar('C:\Users\PC\Desktop\新建文件夹\新建文件夹\Win32\Debug\Project2.ex......
  • Delphi应用EXCEL(3) 使用OLEOBJECT
    1、创建EXCEL的方法首先创建Excel对象,使用单元ComObj:VarExcelApp:Variant;beginExcelApp:=CreateOleObject(''Excel.Application'');使用OLEOBJECT创建的EXCEL应用程序是一个Variant类型,所以DELPHI不能自动补充语句,也没有帮助文件,需要到visualbasic......