Feign超时 在yml文件里的配置方式

目录
  • Feign超时 yml文件配置
  • Feign用法和基本配置
    • 首先说下我的模块结构
    • 首先在test1模块下新建pojo模块
    • 首先在consumer的模块下新建feign调用类
    • 接下来新建provider模块

Feign超时 yml文件配置

ribbon:
#  #指建立连接后从服务端读取到可用资源所用的时间
  ReadTimeOut: 10000
#建立连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间
  ConnectTimeout: 5000

Feign用法和基本配置

SpringBoot集成Feign在不使用注册中心实现模块之间的调用

​ 今天就来说下怎么使用Fegin在不使用注册中心的情况下进行模块之间的调用。原因是:在项目小的情况下,而且还必须要调用其他模块的接口,那么这个时候就要用fegin了,当然还有其他的方法,但我在这里只说这一种简单的方法。

上代码:

首先说下我的模块结构

test1是根模块用于对子模块maven坐标的版本控制管理其pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.person</groupId>
    <artifactId>test1</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>provider</module>
        <module>consumer</module>
        <module>pojo</module>
    </modules>
    <!--spring boot 环境 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <!--spring cloud 版本-->
        <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
    </properties>
    <!--引入Spring Cloud 依赖-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.person</groupId>
                <artifactId>pojo</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring boot web-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>2.1.1.RELEASE</version>
            </dependency>
            <!--feign-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
                <version>2.1.1.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.10</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

紧接着在test1模块下新建两个模块分别为consumer,provider和pojo,其中consumer使用Feign调用provider模块的接口,pojo模块放实体类

首先在test1模块下新建pojo模块

pojo模块的pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>test1</artifactId>
        <groupId>com.person</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>pojo</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>

在pojo模块下新建Goods实体类供其他模块使用:

package com.person.pojo.consumer;
import lombok.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@Builder(toBuilder = true)
public class Goods implements Serializable {
    private static final long serialVersionUID = 1L;
    @NotNull(message = "id不能为空")
    private String id;
    private String name;
    private String price;
    private String colour;
}

consumer的yml文件:

server:
  port: 8012

consumer的pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>test1</artifactId>
        <groupId>com.person</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>consumer</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.person</groupId>
            <artifactId>pojo</artifactId>
        </dependency>
        <!--feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--spring boot web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

首先在consumer的模块下新建feign调用类

package com.person.feign;
import com.person.pojo.consumer.Goods;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "provider",url = "http://localhost:8011")
@RequestMapping("/person")
public interface GoodsFeignClient {
    @GetMapping("/findone/{id}")
    public Goods findOnebyId(@PathVariable("id") String id);
}

上面代码所示 url代表想要调用的模块的前缀因为我的provider模块的端口是8011因此http://localhost:8011就是我的provider前缀,下面的请求路径“/person/findone/{id}”指的是我的provider模块接口路径

下面在consumer模块下新建controller方法:

package com.person.controller;
import com.person.feign.GoodsFeignClient;
import com.person.pojo.consumer.Goods;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private GoodsFeignClient goodsFeignClient;
    @GetMapping("/findone/{id}")
    public Goods findOnebyId(@PathVariable("id") String id) {
        return goodsFeignClient.findOnebyId(id);
    }
}

接下来新建provider模块

provider的yml文件:

server:
  port: 8011

其pom.xml坐标:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>test1</artifactId>
        <groupId>com.person</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>provider</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.person</groupId>
            <artifactId>pojo</artifactId>
        </dependency>
        <!--spring boot web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

然后在provider 中新建controller:

package com.person.controller;
import com.person.pojo.consumer.Goods;
import com.person.service.GoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
 * 服务提供方
 */
@RestController
@RequestMapping("/person")
public class GoodsController {
    @GetMapping("/findone/{id}")
    public Goods findOne(@PathVariable("id") String id) {
        return new Goods("1","红苹果","8888","红色");
    }
}

这个时候在浏览器里面输入http://localhost:8012/order/findone/12回车

显示的是provider的接口返回的数据,说明feign调用成功。关于feign还有很多很多牛x的用法,若有需要可以在官网或者其他地方搜索,我展示的只是适合新手入门上手。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 基于FeignClient调用超时的处理方案

    FeignClient调用超时 出现问题的前提 SpringCloud间FeignClient调用出现ReadTimeOut的情况 FeignClient服务间调用的默认超时时间为2秒 网上查找的解决方案 关闭Hystrix(馊主意) 延长超时间(Spring众多超时时间配置繁多) 解决方案 为FeignClient添加自定义的超时配置,结合Nacos可控 话不多说,贴出源码 /** * FeignClient配置类 * * @author gralves * @date 2020/8/10 *

  • SpringBoot 关于Feign的超时时间配置操作

    目录 Feign的超时时间配置 feign 时间设置 Feign调用问题 \ 超时 1.项目结构 2.在其他微服务中 引入clientXX.jar 3.feign调用超时 Feign的超时时间配置 feign 时间设置 contextId: 可以指定为某个接口进行单独的超时设置 @FeignClient(value = "user",contextId ="device") public interface DeviceFeignService { @Request

  • springcloud之Feign、ribbon如何设置超时时间和重试机制

    Feign.ribbon设置超时时间和重试机制 前言 我们在微服务调用服务的时候,会使用feign和ribbon,比如有一个实例发生了故障而该情况还没有被服务治理机制及时的发现和摘除,这时候客户端访问该节点的时候自然会失败. 所以,为了构建更为健壮的应用系统,我们希望当请求失败的时候能够有一定策略的重试机制,而不是直接返回失败. 先看一个配置: #预加载配置,默认为懒加载 ribbon: eager-load: enabled: true clients: zoo-plus-email zoo-

  • 记一次线上SpringCloud Feign请求服务超时异常排查问题

    由于近期线上单量暴涨,第三方反馈部分工单业务存在查询处理失败现象,经排查是当前系统通过FeignClient调用下游系统出现部分超时失败(异常代码贴在下方). Caused by: feign.RetryableException: Read timed out executing POST http://xxxx        at feign.FeignException.errorExecuting(FeignException.java:84) ~[feign-core-10.1.0.j

  • Feign Client 超时时间配置不生效的解决

    目录 Feign Client 超时时间配置不生效 解决方案 问题描述 Feign Client的各种超时时间设置 1. Feign Client Configuration 2. Hystrix Configuration 3. Ribbon Configuration 4. OkHttp Client Configuration 5. 小结一下吧 Feign Client 超时时间配置不生效 解决方案 Feign Client 的 connectTimeout 和 readTimeout 需

  • 基于springboot服务间Feign调用超时的解决方案

    解决springboot服务间Feign调用超时问题概述 1.起因 在完成项目功能需求的开发,经过自己测试以及通过测试组测试通过后,昨晚正式部署到线上环境进行正式运行前的最后一次的测试.但是在测试中,由A服务调用B服务接口时,***通过Feign调用(其实就是http请求,当A服务调用B服务时,如果不配置超时时间,那么A发出请求后,B应该立即响应,否则A服务会认为B已经断开连接)出现***连接超时的错误,错误信息:Read timed out- 2.原因 用idea开发debug模式调试代码时,

  • Feign超时 在yml文件里的配置方式

    目录 Feign超时 yml文件配置 Feign用法和基本配置 首先说下我的模块结构 首先在test1模块下新建pojo模块 首先在consumer的模块下新建feign调用类 接下来新建provider模块 Feign超时 yml文件配置 ribbon: # #指建立连接后从服务端读取到可用资源所用的时间 ReadTimeOut: 10000 #建立连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间 ConnectTimeout: 5000 Feign用法和基本配置 Spring

  • Springboot 如何指定获取出 yml文件里面的配置值

    之前写过一篇获取properties文件里面的值: Springboot 指定获取自己写的配置properties文件的值 www.jb51.net/article/217899.htm 现在补充多一篇,指定获取yml里面的配置值 . 内容: 这里分别介绍两种方式,都是基于注解实现,分别是: @Value("${xxxxx.xx}") @ConfigurationProperties(prefix = "xxxxx") 进入主题: @Value("${xx

  • springboot中.yml文件参数的读取方式

    目录 yml文件参数的读取 附上一个较为常见的application.yml文件示例 正常在controller中 通过config文件的读取 关于yml文件书写的注意事项 yml文件参数的读取 附上一个较为常见的application.yml文件示例 server: port: 9999 use-forward-headers: true tomcat: remote-ip-header: X-Real-IP protocol-header: X-Forwarded-Proto spring:

  • SpringBoot项目application.yml文件数据库配置密码加密的方法

    在Spring boot开发中,需要在application.yml文件里配置数据库的连接信息,或者在启动时传入数据库密码,如果不加密,传明文,数据库就直接暴露了,相当于"裸奔"了,因此需要进行加密处理才行. 使用@SpringBootApplication注解启动的项目,只需增加maven依赖 我们对信息加解密是使用这个jar包的: 编写加解密测试类: package cn.linjk.ehome; import org.jasypt.encryption.pbe.StandardP

  • 关于springBoot yml文件的list读取问题总结(亲测)

    目录 springBoot yml文件的list读取问题 配置如下 1.定义配置类 2.定义启动的配置类 3.使用方式 读取yml文件里的list配置 YAML 支持以下几种数据类型 这里只介绍list类型的读取 拿到配置文件里的内容 springBoot yml文件的list读取问题 折腾了很久,记录下. 配置如下 # 自定义数据上报信息 xx: # 机组信息 machine1s: - name: XXXX frequency: null frequency-unit: null pressu

  • SpringBoot Profile多环境配置方式

    目录 Profile多环境配置 Profile配置详解 1.问题 2.为什么要使用profiles Profile多环境配置 我们在开发项目时,通常同一套程序会被发布到几个不同的环境,比如:开发.测试.生产等.其中每个环境的数据库地址.redis地 址.服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的事. 对于多环境的配置,各种项目构建工具或是框架的基本思路是一致的,通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后

  • Python OpenGL基本配置方式

    目录 OpenGL基本配置方式 pip 安装 PyOpenGL 测试代码 Python+OpenGL库理解及代码应用 1.读取off文件 OpenGL基本配置方式 参考:http://pyopengl.sourceforge.net pip 安装 PyOpenGL pip install PyOpenGL PyOpenGL_accelerate 测试代码 from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT impor

  • springboot 多环境配置 yml文件版的实现方法

    关于 dev.sit.uat.prod多环境切换的配置 最近小伙伴跟杨洋我聊到了多环境配置的问题,网上的大部分教程都是copy的,很多文章根本就没法用,小伙伴很苦恼啊,于是心(yu)地(shu)善(lin)良(feng)的杨洋回去写了个demo给了小伙 , 那么这边文章呢,正好给大家讲解下关于springboot 的多环境配置 科普时间:  dev.sit.uat.prod是什么呢? 首先给刚接触的小伙伴们科普下含义 dev--本地开发环境: sit--测试环境: uat--准生产环境: pro

  • SpringBoot读取yml文件中配置数组的2种方法

    目录 通过@ConfigurationProperties注解读取 1.读取的是配置在application.yml文件中的属性 2.如果配置是在一个单独的yml文件中 通过@Value注解变相读取,曲线救国方案 一直都在用Spring的@Value注解读取yml中的配置,这两天在读取配置的时候,想读取yml中配置的一个数组,通过@Vaule一直获取不到,通过一番资料的查询,才彻底清楚了@Vaule的使用情况. 在Spring中读取配置文件的快捷方法常见的有两种,一个是通过@Vaule注解进行单

  • docker-compose安装yml文件配置方式

    目录 1.离线安装 2.在线安装 3.卸载 4.定义yml文件 1.离线安装 https://github.com/docker/compose/releases 移动文件 mv docker-compose-linux-x86_64 /usr/local/bin 修改文件名 mv docker-compose-linux-x86_64 docker-compose 给docker-compose赋予执行权限 .默认没有执行权限. chmod -x docker-compose 检测是否成功 d

随机推荐