28个案例问题分析---03---fegin调用404--fegin的使用

简介: 28个案例问题分析---03---fegin调用404--fegin的使用

fegin的使用

五:总结&升华

一:故事背景

服务在生产环境做了负载,部署了两台。用了同一个nacos的命名空间。

上线的时候只对其中的一台做了更新,导致请求到另一台的时候产生了404的问题


二: fegin调用准备

2.1 概念

Feign是一个声明式的HTTP客户端。这意味着开发者可以通过定义接口的方式,来简化使用HTTP API的过程,而不需要手动构建HTTP请求和解析响应。


在定义Feign接口时,开发者需要指定要调用的HTTP端点的细节,包括请求参数、请求方法、请求头等。这些信息被定义在接口方法上的注解中,例如@RequestLine、@Param、@Headers等。


Feign会根据接口定义自动生成具体的HTTP请求,并将HTTP响应转换成Java对象。这样可以大大减少开发者的工作量,并提高代码的可读性和可维护性。


在微服务架构中,服务之间需要相互调用,而Feign可以作为一个轻量级的HTTP客户端,方便地实现微服务之间的调用。开发者只需要在Feign接口中定义服务之间的调用,Feign就可以自动处理HTTP请求和响应的过程。


Feign支持多种HTTP客户端实现,包括Apache HttpClient、OkHttp、JDK HttpURLConnection等。开发者可以根据需要选择不同的HTTP客户端实现。


Feign还支持断路器模式和负载均衡功能,这些功能可以使微服务之间的调用更加可靠和高效。例如,在使用Ribbon作为负载均衡器的情况下,Feign会自动集成Ribbon,从而实现服务调用的负载均衡。


总之,Feign是一个非常便捷的HTTP客户端框架,可以大大简化服务之间的调用过程,并提高代码的可读性和可维护性。在微服务架构中,Feign的应用非常广泛,是一个不可或缺的工具。

2.2 准备使用Nacos的SpringCloud项目

首先准备一个使用了nacos的springCloud项目。并且为这个项目创建两个模块。
这里我们将服务一作为调用方,服务二作为被调用方。(往往我们的项目中,一个服务可能即是调用方,又是被调用方。)

2.3 被调用方操作步骤

被调用方不需要额外增加任何操作,只要有对应的接口就可以了。下图为我的服务二controller提供对外的接口

2.4 调用方操作步骤

2.4.1 引入openFegin的依赖

  <!--        fengin调用-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2.4.2 创建fegin调用的接口2.4.3 启动类上添加@EnableFeignClients注解

@EnableFeignClients注解是Spring Cloud Feign框架提供的一个注解,用于开启Feign客户端功能。


2.4.4需要的地方进行注入,然后进行使用
2.4.5 测试

根据结果我们可以看出。调用的serverOne的服务,serverone里通过fegin调用了serverTwo的接口。


三:部署多个服务

故事背景里提到。同样的服务部署了两份,更新的时候只更新了其中的一份。我们在本地进行一下模拟


3.1 服务部署

我们把上文提到的serviceTwo服务部署两份,由于是在我自己本机上操作,我们使用端口号进行一下区分。

这样我们就模拟出了,serverTwo服务,部署了两份。我们可以看一下nacos,现在serverTwo项目有两个实例。这两个服务的默认权重都是1,也就是如果我再次使用 serverOne对serverTwo进行fegin调用,会走一次9002端口,然后会走一次9004端口。


3.2 服务修改

我们将9004端口对应的服务内容进行一下更改,将serviceTwo/test 接口注释。模拟一下,两个服务不同,即是上文提到的一个服务更新了,另一个服务没有更新,调用到未更新的就会产生404问题


3.3 重启后测试


第二次调用的时候,由于9004对应的serverTwo服务的接口被注销调了,无法调通。这样就复现了上文所出现的问题

一个服务更新了,另一个服务没有更新,调用到未更新的就会产生404问题


四:如何解决

那么我们如何才能避免这种问题呢?我暂时想到的是


将一个服务都配置到一个jenkins里,一次构建,多个服务同时都更新。

通过上线流程约束

五:总结&升华

通过本文,我们复现了之前出过的事故。只要是人去做事,就一定会出错,所以我们要学会让机器去做事,而不是靠人。并且做事的时候一定要求全局观,不能丢掉任何一部分


目录
相关文章
|
5天前
|
Java 数据库
SpringBoot手动取消接口执行方案
实际开发中经常会遇到比较耗时的接口操作,但页面强制刷新或主动取消接口调用后后台还是会继续运行,特别是有大量数据库操作时会增加服务器压力,所以进行研究测试后总结了一套主动取消接口调用的解决方案
20 0
|
5天前
|
Java Maven Nacos
Spring Cloud Eureka 服务注册和服务发现超详细(附加--源码实现案例--及实现逻辑图)
Spring Cloud Eureka 服务注册和服务发现超详细(附加--源码实现案例--及实现逻辑图)
31 0
|
5天前
|
Java API Maven
SpringBoot 调用外部接口的三种方式--学习总结
SpringBoot 调用外部接口的三种方式--学习总结
50 1
|
6月前
|
消息中间件 Java Kafka
SpringBoot中使用异步方法优化Service逻辑,提高接口响应速度
异步方法适用于逻辑与逻辑之间可以相互分割互不影响的业务中, 如生成验证码和发送验证码组成的业务, 其实无需等到真正发送成功验证码才对客户端进行响应, 可以让短信发送这一耗时操作转为异步执行, 解耦耗时操作和核心业务;
|
6月前
|
Dubbo 应用服务中间件 API
启动dubbo消费端过程提示No provider available for the service的问题定位与解决
启动dubbo消费端过程提示No provider available for the service的问题定位与解决
66 0
|
存储 网络协议 Java
SpringBoot在自定义实现类中调用service层等Spring其他层报错为null的解决办法
SpringBoot在自定义实现类中调用service层等Spring其他层报错为null的解决办法
377 0
|
10月前
|
jenkins 持续交付 Nacos
案例03---fegin调用404--fegin的使用
案例03---fegin调用404--fegin的使用
|
10月前
|
负载均衡 Java 数据处理
案例03-fegin调用报404问题
fegin调用报404问题
102 0
|
10月前
|
存储 Java 关系型数据库
28个案例问题分析---24---xxljob控制台不打印日志排查--xxljob问题
28个案例问题分析---24---xxljob控制台不打印日志排查--xxljob问题
221 0
|
10月前
|
存储 缓存 Java
28个案例问题分析---023---部分服务总是出现频繁掉线的情况--nacos,springCloud
28个案例问题分析---023---部分服务总是出现频繁掉线的情况--nacos,springCloud
381 0