当前位置:首页 > 服务端 > Feign独立使用-远程调用

Feign独立使用-远程调用

2022年11月09日 10:22:55服务端8

1.引入依赖

Maven坐标

<!--feign 依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>${feign.version}</version>
</dependency>

2. 定义FeignClient

/**
 * @description:  基础服务
 *
 * FeignClient注解:
 * name/value属性: 这两个的作用是一样的,指定的是调用服务的微服务名称(独立使用时,只需唯一) 可以使用环境变量或者jvm属性定义url字段
 * url: 定义远程服务的domain
 * fallbackFactory: 定义熔断器(可以在熔断器中定义熔断处理,返回兜底的结果)
 *
 * @date: 2020/11/24 14:49
 * @author: fdh
 */
//@FeignClient(name = "baseSapi", url = "${qs.sapi.base.url.prefix}", fallbackFactory = RemoteBaseFallBackFactory.class)
@FeignClient(name = "baseSapi", url = "http://localhost:9001", fallbackFactory = RemoteBaseFallBackFactory.class)
public interface RemoteBaseService {

    /**
     * 获取考季知识点
     *
     * 接口地址: http:// xxxxx
     *
     * @param seasonId
     * @return
     */
    @RequestMapping(value = "/s1/v1/seasonKnowledgePoint/kpListBySeasonId", method = RequestMethod.GET)
    SapiResult<List<KnowledgePointVo>> getKpListBySeasonId(@RequestParam("seasonId") Long seasonId);
}

 3.定义熔断器

/**
 * @description:  远程基础熔断工厂
 * @date: 2020/11/25 13:48
 * @author: fdh
 */
@Component
public class RemoteBaseFallBackFactory implements FallbackFactory<RemoteBaseService> {

    @Override
    public RemoteBaseService create(Throwable throwable) {
        RemoteBaseFallBackServiceImpl remoteBaseFallBackService = new RemoteBaseFallBackServiceImpl();
        remoteBaseFallBackService.setThrowable(throwable);
        return remoteBaseFallBackService;
    }
}

4.定义FeignClient熔断实现

/**
 * @description:  RemoteBaseService熔断处理
 * @date: 2020/11/25 13:49
 * @author: fdh
 */
public class RemoteBaseFallBackServiceImpl implements RemoteBaseService {

    private static final Logger log = LoggerFactory.getLogger(RemoteBaseFallBackServiceImpl.class);

    @Setter
    private Throwable throwable;

    private void printLog(String modules, Throwable throwable){
        if( modules == null ){
            modules = StringUtils.EMPTY;
        }
        log.info("{}异常:", modules, throwable);
    }

    @Override
    public SapiResult<List<KnowledgePointVo>> getKpListBySeasonId(Long seasonId) {
        printLog("知识点接口", throwable);
        return SapiResultUtil.success(Collections.emptyList());
    }
}

5. 扫描FeignClient

/**
 * @description:  启动类
 * @date: 2020/11/25 13:52
 * @author: fdh
 */
@SpringBootApplication
@EnableFeignClients(basePackages = "com.xxx.feign")
public class DaApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(DaApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(DaApplication.class, args);
    }
}

以上就可以实现Feign独立使用,不依赖注册中心,进行独立远程调用

补充:

1. 生产环境上往往需要记录FeignClient远程调用日志,我们可以定义日志输出级别

/**
 * @description:  Feign日志
 * @date: 2020/11/5 16:35
 * @author: fdh
 */
@Configuration
public class FeignConfig {
    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}

推荐日志级别:

级别 打印内容
NONE(默认值) 不记录任何日志
BASIC(更适合生产环境) 仅记录请求方法、URL、响应状态代码以及执行时间
HEADERS 记录BASIC级别的基础上,记录请求和响应的 header
FULL(更适合开发环境) 记录请求和响应的 header、body和元数据

 

 

 

 

 

 

2. 启用熔断并设置熔断超时时间(默认1秒)

feign.hystrix.enabled=true
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 30000

统一处理,需要增加FeignClient远程调用携带加密参数

@Component
public class FeignRequestInterceptor implements RequestInterceptor {

    private org.slf4j.Logger log = LoggerFactory.getLogger(FeignRequestInterceptor.class);
    
    @Override
    public void apply(RequestTemplate requestTemplate) {
        try {
            // xxxx 算法
            //String sign = DigestUtils.md5DigestAsHex(params.getBytes("utf-8"));
            requestTemplate.query("sign", "xxxxxx");
        } catch (UnsupportedEncodingException e) {
            log.error("签名失败:", e);
        }
    }
    
}

  

作者:不喝北冰洋
来源链接:https://www.cnblogs.com/jefferyfeng/p/14030829.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68673.html

标签: Feign
分享给朋友:

“Feign独立使用-远程调用” 的相关文章

No fallback instance of type class  found for feign client user-service(转)

No fallback instance of type class found for feign client user-service(转)

1、错误日志 在 feign 开启熔断,配置 fallback 类,实现当前接口的实现类时,报错信息如下: Error starting ApplicationContext. To display the conditions report re-run you...

SpringCloud:Feign模块引用版本问题

java.io.FileNotFoundException: class path resource [org/springframework/boot/autoconfigure/web/ServerPropertiesAutoConfiguration.class] cannot...

feignclient 添加cookie携带sessionId登录

Feign 支持请求拦截器,在发送请求前,可以对发送的模板进行操作,例如设置请求头等属性,自定请求拦截器需要实现 feign.RequestInterceptor 接口,该接口的方法 apply 有参数 template ,该参数类型为 RequestTemplate,我们可以根...

SpringCloud笔记五:Feign

SpringCloud笔记五:Feign

目录 什么是Feign? 有了Ribbon我还要Feign干嘛? 新建consumer-feign 修改api项目 引入Maven文件 新建feign...

springcloud-Feign基础使用

声明式REST客户端:Feign Feign是一个声明式的Web服务客户端。它使得Web服务客户端的写入更加方便。具有可插拔注解支持,包括Feign注解和JAX-RS注解。 Spring Cloud增加了对Spring MVC注释的支持,并且使用了在Spring Web中默...

Springcloud踩坑记---使用feignclient远程调用服务404

Springcloud踩坑记---使用feignclient远程调用服务404

公司项目进行微服务改造,由之前的dubbo改用SpringCloud,微服务之间通过FeignClient进行调用,今天在测试的时候,eureka注册中心有相应的服务,但feignclient就是无法调通,一直报404错误,排查过程如下: 一、问题:   服务提供方定义的接...

SpringCloud 中集成Sentinel+Feign实现服务熔断降级

SpringCloud 中集成Sentinel+Feign实现服务熔断降级

Sentine 1.背景 Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。这里大家可能会问:Sentinel 和之前常用的熔断降级库 Netf...

SpringCloud(三)-  OpenFeign简介及@FeignClient等注解的使用

SpringCloud(三)- OpenFeign简介及@FeignClient等注解的使用

《 心有多大,舞台就有多大 人得有—理想 》 OpenFeign简介及@FeignClient等注解的使用 唯能极于情,故能极于剑 有问题或错误请及时联系小编或关注小编公众号 "CodeCow",小编一定及时回复和改正,期待和大家一起学习交流 此...

SpringCloud组件:Feign之日志输出

目录 Feign之日志输出 Feign日志输出说明 前期准备 构建项目 tairan-spring-cloud-feign-logger配置 源码位置 Feign之日志输出...

SpringCloud和Dubbo的区别及Dubbo和Feign远程调用的差异

SpringCloud和Dubbo的区别 SpringCloud和Dubbo有什么区别? 两者都是现在主流的微服务框架,但却存在不少差异: 初始定位不同:SpringCloud定位为微服务架构下的一站式解决方案;Dubbo 是...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。