问题标签 [netflix-feign]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
930 浏览

spring-cloud - Feign/Ribbon/Eureka - 创建了一个由 Apache HttpClient 池支持的 RestClient,但从未使用过

我们在 Ribbon 和 Eureka 之上使用 Feign。

我们注意到com.netflix.niws.client.http.RestClient为每个 Feign 客户端自动创建了一个实例,但从未使用过。相反,Feign.Builder创建一个feign.ribbon.RibbonClient将实际 HTTP 调用委托给feign.Client.Default实例的 a。后者使用没有任何池功能的标准 Java HttpConnection。

不幸的是,这些显然无用的RestClient实例(每个 feign 客户端一个)的创建附带了它自己的 Apache HttpClient、它自己的连接池、管家线程和指标的东西......

快速查看 /metrics 执行器端点会显示如下指标:

这些指标由com.netflix.http4.NamedConnectionPool. 无论活动如何,它们的价值都保持在 0。

有人经历过同样的行为吗?为什么为每个 feign 客户端创建这些RestClient实例并且从未使用过?

0 投票
1 回答
30472 浏览

spring-boot - Spring/Eureka/Feign - FeignClient 将 Content-Type 标头设置为 application/x-www-form-urlencoded

当我使用 aFeignClient时,它设置为Content-Typetoapplication/x-www-form-urlencoded而不是application/json;charset=UTF-8.

如果我使用 aRestTemplate发送相同的消息,则消息头Content-Type正确设置为application/json;charset=UTF-8.

FeignClient和都RestTemplate用于Eureka服务发现,我通过调试服务器接收到的 HTTP 消息发现了这个问题。

服务器端的控制器如下所示:

FeignClient在调用警报的服务中的界面如下所示:

来自的 HTTP 消息标头FeignClient是:

警报服务不喜欢Content-Type并抛出以下异常:

如果我将客户端代码更改为使用RestTemplate如下:

它与 一起工作RestTemplatealarm-service接收消息并成功处理它。发送的消息头RestTemplate是:

0 投票
3 回答
30093 浏览

java - 将 @RequestLine 与 Feign 一起使用

我有一个工作的 Feign 接口定义为:

如果我将其更改为使用 @RequestLine

我得到了例外

原因:java.lang.IllegalStateException:方法 getLinksForTrack 未使用 HTTP 方法类型注释(例如 GET、POST)

任何想法为什么?

0 投票
1 回答
1918 浏览

spring-cloud - 保护使用 Spring Cloud 和 Netflix 的 Eureka 和 Feign 的微服务

我试图找出使用 Spring Cloud 和 Netflix 的堆栈来构建和实现微服务的最佳方法,特别是使用 Eureka 和 Feign。我对每个问题都有一些与安全相关的问题:

  1. 我已经看到您可以使用用户名/密码凭据配置 Eureka Server。这可以阻止未经授权的应用程序,但是每个应用程序必须共享凭据才能访问 Eureka。有没有一种简单的方法来创建凭据注册表,以便每个微服务都可以拥有自己的?(将它挂接到 Spring Security 的堆栈中会很不错——UserDetailService等等)

  2. 一旦微服务连接起来并通过 feign 进行通信,是否可以将原始请求中使用的凭据共享/传递给对其他微服务进行的其他调用?因此,如果“Jim”/foosFooService上请求,而FooService/barsBarService上请求,BarService会知道是 Jim 在请求它们吗?

Jim > FooService > BarService - BarService 知道正在为 Jim 处理请求的地方...

0 投票
4 回答
30525 浏览

java - 从另一个项目注入 FeignClient 时出错

我在自动连接另一个项目的假客户端时遇到问题。似乎没有生成和注入 feign 客户端的实现。

这是我得到的错误。

伪装客户端非常简单。为简洁起见,我删除了导入。

我将组件扫描添加到我的项目中,以包含应用程序及其控制器,并将 feign 客户端包含在另一个项目中。

为简洁起见,删除了大部分导入的其余控制器。

我曾尝试在不同的项目和不同的包中定义 feign 客户端接口,并且仅在将其与应用程序放在同一个包中时才看到成功。这让人相信这是一个组件扫描问题,即使我将包包含在扫描中。我想将 feign 客户端接口保留在共享项目中,以定义可重用的“合同”,并让每个项目具有唯一的包结构,而不是使用使用它的应用程序定义 feign 客户端。

谢谢,韦斯。

0 投票
1 回答
20924 浏览

spring-cloud - 使用 spring cloud feign 导致 java.lang.NoClassDefFoundError: feign/Logger

我为 feignClients 启用了 spring cloud,如下所示:

但是一旦我添加了 enableFeignClients,我在编译过程中就遇到了这个错误,

我的 POM 是

为了解决 feign logger 问题,我还需要向 POM 添加哪些其他依赖项?

谢谢

谢谢@spencergibb,根据您的建议,在我更改我的 pom 后它起作用了。现在我有另一个使用 FeignClient 的问题。请看下面:

界面是:

实体店是:

现在当我在 URL 中检索时,我得到了这个错误,

似乎这里的错误是检索到的列表无法转换为存储类。 那么为了使用 FeignClient,我们需要包含任何其他映射器来将 JSON 转换为对象吗?

谢谢

0 投票
2 回答
5946 浏览

spring-boot - 将 feign 和 Ribbon 日志重定向到 log4j2

我目前使用带有 log4j2 的 spring cloud netflix。log4j2 配置来自类路径中的 xml。当我运行应用程序时,我看到 feign 和 Ribbon 日志没有被重定向到配置中指定的记录器。我已经为com.netflix.ribbonfeign包配置了日志,以便在调试级别记录。

但是,为 spring 配置的日志正确重定向到指定的 appender,ribbon & feign 没有。

我正在使用忽略 spring-boot-starter-logging 的 gradle 并在我的构建中添加了 spring-boot-starter-log4j2。

我看到feign有一种方法可以配置 slf4j,但是由于我们使用注释驱动的 feign 支持,我无法将 feign 配置为使用 slf4j 进行日志记录。

任何帮助表示赞赏。

我的 log4j2.xml 看起来有点像

PS:调试 feign/ribbon 的原因是为了了解我们微服务设置中两台不同机器之间奇怪的 feign 行为

0 投票
1 回答
1933 浏览

apache-httpclient-4.x - 具有缓存/eTag 支持的 Spring Cloud Feign

我一直在使用 Spring Cloud Feign,它很棒。但我注意到开箱即用的行为似乎没有使用客户端缓存——例如 eTags。

有没有办法将此行为插入到 Feign 中,以便它对 HTTP 缓存标头具有与您的普通浏览器相同的基本支持?

0 投票
0 回答
298 浏览

spring-cloud - 如何只取出eureka ill服务应用实例以避免hystrix断路?

我正在我的本地机器上试用spring-cloud-samples,我开发了一个简单的 REST 服务,支持 eureka 和 hystrix。

我有一个前端应用程序,它通过 hystrix 命令方法(@HystrixCommand 注释方法)连接到服务,其中包含对 Feign 客户端的引用。

假装客户端

Hystrix 包装器

我已经启动了 Spring MVC ProductService 的两个实例。第一个按预期交付基于给定标识符的产品信息。另一方面,第二个总是抛出 RuntimeException 以模拟系统依赖失败:

在前端,我使用 hystrix 客户端获取产品信息,并且 ProductService 实例将以循环方式(由于功能区)方式调用。由于 ProductService 实例之一总是传递异常,在前端连续多次调用后,ProductService 电路将打开(即使 ProductService 实例之一可以成功处理请求)。

如何仅从 eureka 中删除有问题的 ProductService 实例,并保持其正常运行,以避免 ProductService 的 hystrix 断路?我认为需要更改 ProductService 的健康指标资源“/health”的功能,以便对系统依赖失败执行额外检查。

我偶然发现使用spring-boot-starter-actuator可以执行自定义健康检查,但这似乎无助于从 eureka 中取出服务实例。

0 投票
0 回答
1932 浏览

spring-cloud - 如何安全地让@RestController 类实现带有@FeignClient 注释的接口

给定以下代码示例

-- 客户端库代码

-- 服务库代码

如果服务库引用了客户端库,那么在应用启动时,通过组件扫描我们会到达一个状态,从StringHystrixClient填充依赖,spring容器不知道怎么办,因为有两个bean实现了StringClient。

避免这种情况的一种解决方案是不在 StringController 中实现 StringClient,但是接口和其余控制器的代码重复很容易出错。有人可以为这个问题指出一个更优雅的解决方案吗?