Java 使用SpringWebClient通过特定的网络接口发送http请求

Java 使用SpringWebClient通过特定的网络接口发送http请求,java,spring,spring-webflux,Java,Spring,Spring Webflux,我正在使用,需要通过特定NIC发送请求(在同一台计算机上有两个网络适配器的典型情况) 我查看了文档,但没有结果,源代码似乎有点复杂。我怎样才能做到这一点呢?目前(2017年6月)没有很好的解决方案。在内部,API是存在的,但它不暴露于外部世界 唯一可行的解决方案是通过反射。基本上,您需要拦截reactor HttpClient创建,此时: 从HttpClient实例的“选项”字段收集HttpClientOptions对象 从HttpClientoptions实例的“bootstrapTempl

我正在使用,需要通过特定NIC发送请求(在同一台计算机上有两个网络适配器的典型情况)

我查看了文档,但没有结果,源代码似乎有点复杂。我怎样才能做到这一点呢?

目前(2017年6月)没有很好的解决方案。在内部,API是存在的,但它不暴露于外部世界

唯一可行的解决方案是通过反射。基本上,您需要拦截reactor HttpClient创建,此时:

  • 从HttpClient实例的“选项”字段收集HttpClientOptions对象
  • 从HttpClientoptions实例的“bootstrapTemplate”字段收集引导对象
  • 使用引导实例的“localAddress”方法设置所需的本地地址
希望这可以帮助一些人,因为我花了几个小时的调试来理解流程。您可以看到一个示例,我们在其中实现了此行为。这很悲哀,但这是目前唯一的办法


请不要在将来API公开时否决这个答案

听起来更像是网络路由问题;在那里,您可以选择要发送到哪个NIC的服务器的数据包。在网络通信中,您可以使用“绑定”和“连接”来强制您的传出连接使用特定的地址和端口。在普通Java中,这是可能的,但我无法找到一种使用此库的方法,因此产生了这个问题。希望能澄清这一点。@Frischling您可能也有兴趣了解apache http客户端的使用情况:有趣:-)我的直觉告诉我,为了避免这种情况,我发现,这是一种路由,将代码强烈链接到NIC名称(甚至可能会更改)并不是很酷。不过,这取决于您的组织。恐怕这不是关于“将代码链接到NIC名称”。