问题标签 [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 投票
0 回答
1400 浏览

http - 当错误代码为 401 Unauthorized 时,Feign 响应返回 body null

当我收到 401 未经授权的响应时,errordecoder 响应对象中没有正文部分。如果我仅将响应的状态代码更改为 403 或服务器端的其他任何内容,则没有问题。也从 Postman Rest Client 尝试过,也没有问题。当状态码为 401 但内容长度似乎为真时,我挖掘了 feign 和 errorstream 和 inputstream 的 Client 类始终为空。任何想法?

0 投票
1 回答
532 浏览

spring-cloud - Feign客户端包装

我对 Feign 很陌生。今天才发现……当我读到 Spring Cloud Feign 时,我的第一个问题是:“你如何打包你的 feign 客户端?

我举个例子。假设我们有 2 个微服务 M1 和 M2。M2 使用来自 M1 的端点。

例如,我们可以为 M1 构建 2 个罐子

  1. 第一个将是微服务本身。
  2. 第二个可以是 M1 的 Feign 客户端,暴露服务。

在这个解决方案中,我看到了与EJB2 存根和骨架部件的类比。而且我看到了另一个可能的优势:Feign 客户端始终与实现(v1)同步(v1)。

还是只在 M2 微服务中声明 Feign 客户端。也就是说,如果第三个微服务需要 M1,它也会声明一个 Feign 客户端(这可能会有所不同,因为它的需求不同)。

也许我完全错了,请纠正我。

非常感谢 !再见

0 投票
2 回答
9506 浏览

hystrix - 使用 Netflix Feign 和 Hystrix 设置请求超时

我正在使用 Feign 创建一个 REST 客户端。我的电话工作正常,但我想添加一些超时支持,而且我有一段时间想弄清楚如何做到这一点。

Feign 的文档说“要将 Hystrix 与 Feign 一起使用,请将 Hystrix 模块添加到您的类路径中。然后使用 HystrixFeign 构建器。” 好的,所以现在我有了这个:

现在我所有的方法都返回了 HystrixCommands,我可以执行或排队,但我仍然看不到如何配置它们。

Hystrix wiki ( https://github.com/Netflix/Hystrix/wiki/Configuration ) 说配置应该像这样添加到 HystrixCommand 构造函数中:

但是我的命令是由 Feign 构建/返回的,所以我无权访问构造函数。

另一件值得注意的事情是 Feign-Hystrix 自述文件 ( https://github.com/Netflix/feign/tree/master/hystrix ) 说“要将 Hystrix 与 Feign 一起使用,请将 Hystrix 模块添加到您的类路径中。然后,配置假装使用 HystrixInvocationHandler,”但谷歌搜索 HystrixInvocationHandler 将我指向非 Netflix 存储库。即使我使用了它,我也看不到如何配置 Feign 来使用它。

请告诉我我很笨,这非常简单,这会让我为自己已经解决了这个问题而感到高兴,并为自己无法解决这个问题而感到羞耻。

TL;DR:我想为我的 Feign 客户端发出的请求设置超时。怎么做?

0 投票
3 回答
3397 浏览

spring-cloud - 属性文件中的 Spring Cloud @FeignClient 服务名称

我想从属性文件中设置@FeignClient 中的服务名称,如下所示:

并设置名称application.yml,例如:

user-service服务在 Eureka 中注册的名称在哪里。

我已经尝试过,但它不起作用。它抱怨无效的名称。

可以做这样的事情吗?

0 投票
2 回答
7939 浏览

spring-boot - Forward a request header or the security context with a Feign client RequestInterceptor

I would like to forward a request header with a feign client RequestInterceptor but, within RequestInterceptor.apply, RequestContextHolder.getRequestAttributes() is null, so is SecurityContextHolder.getContext().getAuthentication() (where I could also eventually get the value of my header).

This used to work before upgrading to Spring-Cloud Brixton, where the hystrix commands must now probably be run in a separate thread, because changing to the following parameter solves the problem :

Now, I'm not too keen on changing this kind of default values if not necessary, is there another, recommended, way of forwarding headers now ?

Thanks

0 投票
1 回答
10410 浏览

java - Feign 客户端上的“身体参数过多”异常

我正在使用 Springs Feign Client 功能从一个微服务与另一个微服务进行通信。

现在,被调用的服务公开了一个 REST 接口,该接口接受一个文件和一个相关的 (JSON) 对象。

该接口运行良好,我已通过从不同来源向其发送有效的多部分/混合实体来验证这一点。

然后,在我的其他服务中,我设置了一个匹配的 feign 客户端来使用这个接口:

同样,从一个服务到另一个服务的连接正在工作,我已经在 feign 客户端(一个不使用多个部分)中使用不同的请求接口验证了这一点。

当我尝试使用此特定接口方法构建(客户端)服务时,出现以下异常:

我能做些什么来完成这项工作吗?正如我所说,它可以到达 REST 接口,并且不同的 feign 调用正在工作。如果我没记错的话,这应该可行。Springs Feign 只是不支持 feign 接口的 multipart/mixed 吗?

0 投票
1 回答
1116 浏览

spring-cloud - 确定功能区(+ Feign)客户端中的缓存实例

我们正在 Spring Cloud + NetflixOSS 上构建微服务架构,到目前为止,这真是太棒。然而我们注意到,当我们第一次启动 Eureka + 2 个单独的微服务时,Service1 无法连接到 Service2 大约 30 秒,即使它们都非常快速地注册到 Eureka 并单独出现。这发生在本地或部署(通过 Tutum 在 AWS 上)

我们得到的错误是:

负载均衡器没有可用于客户端的服务器:Service1

几乎我们所有的超时和设置都被指定为默认值,所以我们觉得有什么问题。我们担心的是滚动更新到 Service1 并让它注册到 Eureka 然后有 30 秒的停机时间(或者可能取决于 Service1 的 Service2 停机时间)

有没有人见过这种行为?有没有办法检查/调试/记录客户端负载平衡候选者?我们已经浏览了很多 Netflix 代码(有/没有调试器),但我们没有看到很多有用的日志记录和自省点(特别是因为 Observables 在深度调试会话期间往往会超时)

建议?建议?渴望牺牲的异教徒神?

谢谢

0 投票
3 回答
25361 浏览

unit-testing - 模拟 Eureka Feign 客户端进行单元测试

我正在使用 spring cloud 的 eureka 和 feign 在某些服务之间进行通信(比如说 A 和 B)。现在我想对我的单个服务(A)的服务层进行单元测试。问题是,这个服务 (A) 正在使用一个 feign 客户端来请求另一个服务 (B) 的一些信息。

在没有任何特殊配置的情况下运行单元测试会引发以下异常:java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have available server for client: service-b=> 但我不希望任何服务器运行。

我的问题是:有没有办法模拟 feign 客户端,所以我可以在不运行 eureka 实例和服务(B)的情况下对我的服务(A)进行单元测试?

编辑:我最终为假装客户端创建了一个存根。存根被标记为主要组件,以强制在我的测试中实例化存根。
这是我想出的解决方案。

0 投票
1 回答
3226 浏览

spring-mvc - Spring Cloud Netflix:通过 RequestInterceptor 将主机请求参数传递给 FeignClient

我正在使用 Eureka、Zuul 和 FeignClient 构建一个 Spring Cloud 项目(带有 Spring Boot 1.3.1 的 Brixton.M4),我正在尝试添加多租户支持(租户由子域标识:tenant1.myservice.com)。为此,我想以某种方式将原始子域与通过 Feign 从服务转发到另一个服务的请求一起传递,但我似乎无法找到正确的方法来做到这一点。

我所拥有的是一个客户端,它公开了一个@RestController,它调用一个@FeignClient 来与我的后端通信,该后端通过它自己的@RestController 向客户端公开服务器操作。

@FeignClient 在服务器上使用与我的@RestController 相同的接口:

我目前正在尝试做的是在 RequestInterceptor 中设置一个标头:

我的提供者类是一个简单的组件,我试图在其中注入请求/会话范围 bean:

bean(我尝试了会话和请求范围):

在服务器上,我使用 Hibernate 多租户提供程序,它应该捕获标头值并使用它来定义要连接到哪个数据库:

似乎对服务器的 Feign 调用是在另一个线程中完成的,并且超出了传入的请求范围,所以我不确定如何传递该值。

当我在 RequestInterceptor 中对租户值进行硬编码时,一切正常,所以我知道其余部分工作正常。

我还查看了许多其他关于 Zuul “X-Forwaded-For” 标头的帖子,但在服务器上收到的请求中找不到它。我也尝试添加一个 ZuulFilter 以将主机名传递给下一个请求,但我看到的是 ZuulFilter 接收了对客户端的原始请求,我可以添加但当 Feign 请求发送到后端服务时不能添加,即使我在zuul中映射它(我想这是有意的?)。

我不太确定下一步是什么,希望能得到一些建议。

0 投票
0 回答
1448 浏览

java - 在 Spring Boot 上使用带有 Ribbon 的 feign 无法解析标题

我正在使用功能区和假装连接到 api 进行一些测试。该 api 使用 spring boot 运行:

这是我使用的客户端代码: feign 接口:

当我单独使用 feign 时,一切正常:

但是当我也使用功能区时:

我在 Spring Boot 服务器日志记录中收到以下错误:

看起来我在我的 Spring Boot 应用程序中收到了以下标题:

知道我做错了什么吗?我错过了什么吗?