1. 概述

老话说的好:任何问题都有不止一种的解决方法,当前的问题没有解决,只是还没有发现解决方法,而并不是无解。

言归正传,之前我们聊了 SpringCloud 的服务治理组件 Eureka,今天我们来聊聊服务间的通信组件 Feign。

闲话不多说,直接上代码。

2. my-eureka-client 工程中增加Service方法

2.1 概述

在 my-eureka-client 工程中,创建 Service 方法,然后新增一个 my-feign 服务使用 Feign 组件远程调用这个方法。

关于 my-eureka-client 的搭建,可参见我的上一篇文章《SpringCloud 2020.0.4 系列之Eureka》(https://www.cnblogs.com/w84422/p/15449221.html)。

2.2 增加接口 EurekaClientService

@RequestMapping("/api")
public interface EurekaClientService { @PostMapping("/hello")
String hello(@RequestParam(required = false) String name,
@RequestParam(required = false) Integer age);
}

注意:由于此 Service 方法,我们需要提供给其他服务远程调用,因此需要使用 @RequestMapping 指定他的请求资源路径。

2.3 增加实现类 EurekaClientServiceImpl 

@RestController
public class EurekaClientServiceImpl implements EurekaClientService{ @Value("${server.port}")
private String port; @Override
public String hello(String name, Integer age) { System.out.println("-------------- my-eureka-client service---------------"); System.out.println(name);
System.out.println(age);
System.out.println(port); System.out.println("-------------- my-eureka-client service---------------"); return port;
}
}

注意:由于此 Service 方法,我们需要提供给其他服务远程调用,因此这里不能再用 @Service 注解了,而要使用 @RestController 注解,将其作为 Rest 接口暴露出去。

3. my-feign 工程的搭建

3.1 主要依赖

        <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 健康检查 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

3.2 主要配置及 Feign 超时策略配置

spring:
application:
name: my-feign
server:
port: 37000
eureka:
client:
service-url:
defaultZone: http://zhuifengren1:35000/eureka/,http://zhuifengren2:35001/eureka/ # Eureka Server的地址
healthcheck:
enabled: true # 开启健康检查, 依赖于 spring-boot-starter-actuator
instance:
lease-renewal-interval-in-seconds: 5 # 发出续约指令的间隔,默认30秒
lease-expiration-duration-in-seconds: 30 # 租期到期时间,默认90秒 # feign 配置
feign:
client:
config:
# 全局配置
default:
connectTimeout: 1000 # 连接超时时间,单位ms
readTimeout: 3000 # 获取Response响应超时时间,单位ms # 针对 my-eureka-client 的 feign 配置,优先级高于全局配置
my-eureka-client:
connectTimeout: 300 # 连接超时时间,单位ms
readTimeout: 2000 # 获取Response响应超时时间,单位ms

3.3 Feign 重试策略配置

增加 FeignConfigure 类

@Configuration
public class FeignConfigure { @Bean
public Retryer feignRetryer(){ // 第一个参数:重试的时间间隔,单位毫秒,每次会增加1.5倍,但会小于等于最大间隔
// 第二个参数:发起当前请求的最大时间间隔,单位毫秒
// 第三个参数:重试次数,包括第一次调用,每次重试可能会请求不同服务节点
return new Retryer.Default(100, 1000, 3);
}
}

3.4 增加 Feign 接口 

@FeignClient("my-eureka-client")  // value 为被调用服务的名称
@RequestMapping("/api")
public interface EurekaClientService { @PostMapping("/hello")
String hello(@RequestParam(required = false) String name,
@RequestParam(required = false) Integer age);
}

此接口可以由调用方根据实际情况编写。也可由被调用方将Service接口层剥离为单独的模块提供,调用方依赖即可。

3.5 将 Feign 接口类注入到调用方的 Controller 类或 Service 类中

    @Autowired
private EurekaClientService eurekaClientService; public String hello(String name, Integer age) {
System.out.println("------------ my-feign service ------------");
return eurekaClientService.hello(name, age);
}

3.6 启动类增加 @EnableFeignClients 注解

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class MyFeignApplication { public static void main(String[] args) {
SpringApplication.run(MyFeignApplication.class, args);
}
}

3.7 启动服务

先启动 Eureka Server,再启动 my-eureka-client,最后启动 my-feign。

4. 综述

今天聊了一下 Feign 的相关知识,希望可以对大家的工作有所帮助。

欢迎帮忙点赞、评论、转发、加关注 :)

关注追风人聊Java,每天更新Java干货。

5. 个人公众号

追风人聊Java,欢迎大家关注

my-eureka-client

SpringCloud 2020.0.4 系列之 Feign的更多相关文章

  1. SpringCloud 2020.0.4 系列之 Stream 消息广播 与 消息分组 的实现

    1. 概述 老话说的好:事情太多,做不过来,就先把事情记在本子上,然后理清思路.排好优先级,一件一件的去完成. 言归正传,今天我们来聊一下 SpringCloud 的 Stream 组件,Spring ...

  2. SpringCloud 2020.0.4 系列之 Stream 延迟消息 的实现

    1. 概述 老话说的好:对待工作要有责任心,不仅要完成自己的部分,还要定期了解整体的进展. 言归正传,我们在开发产品时,常常会遇到一段时间后检查状态的场景,例如:用户下单场景,如果订单生成30分钟后, ...

  3. SpringCloud 2020.0.4 系列之 Stream 消息出错重试 与 死信队列 的实现

    1. 概述 老话说的好:出错不怕,怕的是出了错,却不去改正.如果屡次出错,无法改对,就先记下了,然后找援军解决. 言归正传,今天来聊一下 Stream 组件的 出错重试 和 死信队列. RabbitM ...

  4. SpringCloud 2020.0.4 系列之Eureka

    1. 概述 老话说的好:遇见困难,首先要做的是积极的想解决办法,而不是先去泄气.抱怨或生气. 言归正传,微服务是当今非常流行的一种架构方式,其中 SpringCloud 是我们常用的一种微服务框架. ...

  5. SpringCloud 2020.0.4 系列之服务降级

    1. 概述 老话说的好:做人要正直,做事要正派,胸怀坦荡.光明磊落,才会赢得他人的信赖与尊敬. 言归正传,之前聊了服务间通信的组件 Feign,今天我们来聊聊服务降级. 服务降级简单的理解就是给一个备 ...

  6. SpringCloud 2020.0.4 系列之 Bus

    1. 概述 老话说的好:会休息的人才更会工作,身体是革命的本钱,身体垮了,就无法再工作了. 言归正传,之前我们聊了 SpringCloud 的 分布式配置中心 Config,文章里我们聊了config ...

  7. SpringCloud 2020.0.4 系列之 Gateway入门

    1. 概述 老话说的好:做人要有幽默感,懂得幽默的人才会活的更开心. 言归正传,今天我们来聊聊 SpringCloud 的网关组件 Gateway,之前我们去访问 SpringCloud 不同服务的接 ...

  8. SpringCloud 2020.0.4 系列之 JWT用户鉴权

    1. 概述 老话说的好:善待他人就是善待自己,虽然可能有所付出,但也能得到应有的收获. 言归正传,之前我们聊了 Gateway 组件,今天来聊一下如何使用 JWT 技术给用户授权,以及如果在 Gate ...

  9. SpringCloud 2020.0.4 系列之服务降级的其他用法与熔断

    1. 概述 老话说的好:控制好自己的情绪,才能控制好自己的人生.冲动是魔鬼,冷静才最重要. 言归正传,之前聊了在 Feign 调用时,如何给整个 Feign接口类 增加降级策略. 今天我们来聊一下 H ...

随机推荐

  1. RabbitMQ之消息模式1

    消息100%的投递 消息如何保障100%的投递成功? 什么是生产端的可靠性投递? 保障消息的成功发出 保障MQ节点的成功接收 发送端收到MQ节点(Broker)确认应答 完善的消息进行补偿机制 BAT ...

  2. 服务器安装CentOS7.9系统(U盘启动方式)

    一.安装环境 机房的华为GPU服务器,型号G2500,8张P4显卡,需要安装最小化的CentOS7.9操作系统,利用U盘启动的方式进行安装. 二.安装说明 虽然本环境是GPU服务器,但是安装方式同样适 ...

  3. Robot Framework(9)- 使用变量文件

    如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html 啥是变量文件 变 ...

  4. 异步处理方式之信号(三):kill、raise、alarm、pause函数简介

    文章目录 6. 函数kill和raise 7. 函数alarm和pause 7.1 alarm() 7.2 pause() 6. 函数kill和raise kill函数用来将信号发送给进程或者进程组. ...

  5. Docker Compose 实践及梳理

    Docker Compose 可以实现 Docker 容器集群的编排,可以通过 docker-compose.yml 文件,定义我们的服务及其需要的依赖,轻松地运行在测试.生产等环境 文档 Produ ...

  6. (4)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-Spring Cloud开发环境的准备和Lombok安装步骤

    ​ 开发环境的准备主要涉及三个方面:JDK.Maven.Spring Tools 4 for Eclipse. 1.JDK JDK 的版本用 1.8 即可,环境变量大家自行去配置.配置好环境变量,在命 ...

  7. 使用Eclipse的基本配置

    因本人 IntelliJ IDEA 正版授权前些日子已到期,最近开始使用 Eclipse .体验开发了一阵子,觉得除了在界面美观与前端编辑的操作上 Eclipse 与 IDEA 差距还比较大以外,其他 ...

  8. vscode快速添加引号 批量增加引号(用于批量格式化代码)

    一.在浏览器中将Params复制到pycharm的py文件中 二.选中需要添加引号的部分,Ctrl+H 调出替换工具栏 三.填写正则表达式 (.*?): (.*) '$1':'$2', 右侧注意点击使 ...

  9. ARP-NAT(MAC Address Translation)的原理

    本文部分图片来自: http://wiki.deliberant.com/faq/wireless-bridge-routing-arpnat/ https://wiki.openwrt.org/do ...

  10. Shell系列(21)- 字符截取命令printf

    作用 printf是标准格式输出命令,控制输出格式,不会自动加入换行符.awk会用到该条命令 命令 printf '输出类型输出格式' 输出内容 #''双引号不能少,输出类型和输出格式之间没有空格 输 ...