通过Feign进行调用@FeignClient 找不到的解决方案
作者:人在旅途我渐行渐远 发布时间:2023-08-18 19:06:52
Feign进行调用@FeignClient 找不到
通过Feign 进行调用
这里配置spring-cloud 版本为 M8的
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.M8</spring-cloud.version>
</properties>
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.0.0.RC1</version>
</dependency>
注意:spring-cloud 版本一定要选好,不然可能会找不到FeignClient,
再网上看到这样一句话:
Spring Cloud对Feign的支持由org.springframework.cloud:spring-cloud-netflix-core
移到org.springframework.cloud:spring-cloud-openfeign-core下,
Finchley.M8版本下的spring-cloud-starter-openfeign:2.0.0.M2的pom依赖文件中导入的是
spring-cloud-netflix-core而非spring-cloud-openfeign-core,
需要我们在pom文件中添加对应依赖管理使spring-cloud-starter-openfeign版本
更新到2.0.0.RC1
那么接下来我们进行代码整理
编写接口
@FeignClient(name="eureka-client-1")
public interface EurekaClient {
@GetMapping("/info")
String getInfo();
}
调用
@GetMapping("getMessage")
public String getMessage(){
String res = eurekaClient.getInfo();
return res;
}
Feign通过服务名调用服务,找不到服务
报错环境
eureka注册中心在远程服务器上
本地服务注册到远程的eureka注册中心
本地服务通过Fegin组件+服务名调用服务
报错时,注册中心的情况
Application Status
SERVICE-HOT 192.168.22.180:8308
SERVICE-REDIS 127.0.0.1:4046
SERVICE-ZUUL 127.0.0.1:4041
报错情况
feign.RetryableException: connect timed out executing GET http://SERVICE-REDIS/redis/NaviKey-24149-1
at feign.FeignException.errorExecuting(FeignException.java:84)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:113)
排查后发现:是因为注册服务ip问题,导致本地服务无法通过服务名字找到相应的服务。
远程项目和eureka服务部署在同一台服务器上,所以通过127.0.0.1去服务中心注册服务是没问题的
本地项目通过远程服务器ip来注册服务,也没问题
在同一个注册中心上,可以互相发现服务,就是通过名字可以找到对方,没错
问题在于, 当本地SERVICE-HOT服务在eureka中心找到SERVICE-REDIS服务后,redis服务告诉他,我的服务ip地址是127.0.0.1:4046.那么,这就有问题了!!!
本地服务和远程服务不在一台服务器上,你的127.0.0.1是自己的服务器ip,本地服务肯定找不到
所以,注册服务时,统一都使用服务器ip来注册就行了,修改后的配置中心如下:
Application Status
SERVICE-HOT 192.168.22.180:8308
SERVICE-REDIS 192.168.22.180:4046
SERVICE-ZUUL 192.168.22.180:4041
不修改服务注册配置,还有一种办法:使用fegin时,通过url指定访问服务的ip
@FeignClient(value = "SERVICE-REDIS",
url="http://192.168.22.180:4041/service-redis" ,
fallback = RedisSvcFallback.class)
public interface RedisSvc {
来源:https://blog.csdn.net/jun_1990/article/details/92836738
猜你喜欢
- 前言JavaEE(Java Enterprise Edition),Java企业版,是一个用于企业级web开发平台。最早由Sun公司定制并发
- 一段看似平平无奇的代码Classroom classroom = this.getOne( Wrappers.<Class
- @GetMapping和@GetMapping(value=““)区别背景初期对于@GetMappi
- 简单实现了下:import javax.crypto.BadPaddingException;import javax.crypto.Cip
- 无聊逛论坛,发现了这张图真是厉害啊,这排序, 既有多线程,又有排序,还有lambda表达式,但是这是C#版本,作为一个入坑的Java爱好者,
- 1.定义Token的注解,需要Token校验的接口,方法上加上此注解import java.lang.annotation.ElementT
- 概述在mvn clean install时,控制台各种报错,大概有:java:[8,52] 程序包com.xxx不存在java:[98,27
- Maven依赖:<dependency><groupId>de.rototor.jeuclid</groupI
- 前言:在 Java 语言中,提高程序的执行效率有两种实现方法,一个是使用线程、另一个是使用线程池。而在生产环境下,我们通常会采用后者。为什么
- 前言:一个游戏里的一个人物会存在多种状态,那么就需要有一个专门管理这些状态的类。不然会显得杂乱无章,不易于后面状态的增加或者减少。思路:既然
- 弃用内容先来纠正一个误区。主要之前在版本更新介绍的时候,存在一些表述上的问题。导致部分读者认为这次的更新是Datasource本身初始化的调
- 线程状态NEW:刚创建未启动的线程RUNNABLE:正在执行状态BLOCKED:处于阻塞状态的线程WAITING:正在等待另一个线程执行特定
- Java事件处理机制java中的事件机制的参与者有3种角色:1.event object:事件状态对象,用于listener的相应的方法之中
- package TestList;import java.util.ArrayList;import java.util.Iterator;
- springboot Interceptor * excludePathPatterns忽略失效excludePathPatterns方法是
- List接口是Collection接口的子接口,List有一个重要的实现类--ArrayList类,List中的元素是有序排列的而且可重复,
- Comparable 比较器,内置定义的比较方法,实现比较 较简单Comparator 策略模式,需要定义不同的策略和比较的对象,实现比较
- 前言Java中共有八种基本数据类型:byte,int,short,long,float,double,char,boolean。计算机中的基
- 首先不可否认,这些在面试上会经常被面试官问起,但是你回答的让面试官满意吗?当然如果你知道了这些原理,或许你就不怕了。既然说到了原理,我们还是
- 前言在上篇文章《初识GraphQL》中我们大致的了解了GraphQL作用,并通过简单示例初步体验了GraphQL的使用。下面我们从Hello